一贝奇、理解什么是MyBatis冕末?
MyBatis 是支持普通 SQL 查詢弦讽,存儲過程和高級映射的優(yōu)秀持久層框架。 MyBatis 消除了幾乎所有的 JDBC 代碼和參數(shù)的手工設(shè)置以及對結(jié)果集的檢索示弓。 MyBatis 可以使用簡單的XML 或注解用于配置和原始映射,將接口和 Java 的 POJO( Plain Old Java Objects呵萨,普通的Java 對象)映射成數(shù)據(jù)庫中的記錄.
1)MyBATIS 目前提供了三種語言實(shí)現(xiàn)的版本奏属,包括:Java、.NET以及Ruby潮峦。(我主要學(xué)習(xí)java囱皿,就講java的使用)
2)它提供的持久層框架包括SQL Maps和Data Access Objects(DAO)勇婴。
3)mybatis與hibernate的對比?
mybatis提供一種“半自動化”的ORM實(shí)現(xiàn)嘱腥。
這里的“半自動化”耕渴,是相對Hibernate等提供了全面的數(shù)據(jù)庫封裝機(jī)制的“全自動化”O(jiān)RM實(shí)現(xiàn)而言,“全自動”O(jiān)RM實(shí)現(xiàn)了POJO和數(shù)據(jù)庫表之間的映射齿兔,以及 SQL 的自動生成和執(zhí)行橱脸。
而mybatis的著力點(diǎn),則在于POJO與SQL之間的映射關(guān)系分苇。
二添诉、簡單例子(快速入門)
1)首先建立項目java web
2)導(dǎo)入mybatis所需的jar包
mybatis需要jar包:mybatis-3.3.0.jar
mysql驅(qū)動jar包:mysql-connector-java-5.1.15.-bin.jar
日志記錄jar包:log4j.jar
3)創(chuàng)建數(shù)據(jù)庫數(shù)據(jù)(mysql)
**4)mysql驅(qū)動配置文件(這樣可以優(yōu)化性能) **
**5)添加mybatis配置文件mybatis.cfg.xml **
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 引入外部配置文件 -->
<properties resource="mysql.properties"></properties>
<!-- 配置mybatis運(yùn)行環(huán)境 -->
<environments default="cybatis">
<environment id="cybatis">
<!-- type="JDBC" 代表使用JDBC的提交和回滾來管理事務(wù) -->
<transactionManager type="JDBC" />
<!-- mybatis提供了3種數(shù)據(jù)源類型,分別是:POOLED,UNPOOLED,JNDI -->
<!-- POOLED 表示支持JDBC數(shù)據(jù)源連接池 -->
<!-- UNPOOLED 表示不支持?jǐn)?shù)據(jù)源連接池 -->
<!-- JNDI 表示支持外部數(shù)據(jù)源連接池 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
</configuration>
6)創(chuàng)建對應(yīng)的實(shí)體對象
對應(yīng)的java代碼:
package com.cy.mybatis.beans;
import java.io.Serializable;
public class UserBean implements Serializable{
private static final long serialVersionUID = 1L;
private Integer id;
private String username;
private String password;
private Double account;
public UserBean() {
super();
}
public UserBean(String username, String password, Double account) {
super();
this.username = username;
this.password = password;
this.account = account;
}
public UserBean(Integer id, String username, String password, Double account) {
super();
this.id = id;
this.username = username;
this.password = password;
this.account = account;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Double getAccount() {
return account;
}
public void setAccount(Double account) {
this.account = account;
}
@Override
public String toString() {
return "UserBean [id=" + id + ", username=" + username + ", password="
+ password + ", account=" + account + "]";
}
}
7)創(chuàng)建方法接口UserMapper.java和定義操作t_user表的sql映射文件UserMapper.xml
提供簡單的增刪改查數(shù)據(jù)信息医寿。
package com.cy.mybatis.mapper;
import java.util.List;
import com.cy.mybatis.beans.UserBean;
public interface UserMapper {
/**
* 新增用戶
* @param user
* @return
* @throws Exception
*/
public int insertUser(UserBean user) throws Exception;
/**
* 修改用戶
* @param user
* @param id
* @return
* @throws Exception
*/
public int updateUser (UserBean user,int id) throws Exception;
/**
* 刪除用戶
* @param id
* @return
* @throws Exception
*/
public int deleteUser(int id) throws Exception;
/**
* 根據(jù)id查詢用戶信息
* @param id
* @return
* @throws Exception
*/
public UserBean selectUserById(int id) throws Exception;
/**
* 查詢所有的用戶信息
* @return
* @throws Exception
*/
public List<UserBean> selectAllUser() throws Exception;
}
UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cy.mybatis.mapper.UserMapper">
<!-- 自定義返回結(jié)果集 -->
<resultMap id="userMap" type="UserBean">
<id property="id" column="id" javaType="java.lang.Integer"></id>
<result property="username" column="username" javaType="java.lang.String"></result>
<result property="password" column="password" javaType="java.lang.String"></result>
<result property="account" column="account" javaType="java.lang.Double"></result>
</resultMap>
<!-- 在各種標(biāo)簽中的id屬性必須和接口中的方法名相同 栏赴, id屬性值必須是唯一的,不能夠重復(fù)使用糟红。parameterType屬性指明查詢時使用的參數(shù)類型艾帐,resultType屬性指明查詢返回的結(jié)果集類型-->
<!-- useGeneratedKeys:( 僅 對 insert 有 用 ) 這 會 告 訴 MyBatis 使 用 JDBC 的getGeneratedKeys
方法來取出由數(shù)據(jù)(比如:像 MySQL 和 SQLServer 這樣的數(shù)據(jù)庫管理系統(tǒng)的自動遞增字段)內(nèi)部生成的主鍵。默認(rèn)值: false盆偿。 -->
<!--keyProperty: (僅對 insert有用)標(biāo)記一個屬性柒爸, MyBatis 會通過 getGeneratedKeys或者通過 insert 語句的 selectKey 子元素設(shè)置它的值。默認(rèn):不設(shè)置事扭。 -->
<!--#{}中的內(nèi)容捎稚,為占位符,當(dāng)參數(shù)為某個JavaBean時求橄,表示放置該Bean對象的屬性值 -->
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
insert into t_user (username,password,account) values (#{username},#{password},#{account})
</insert>
<update id="updateUser" >
update t_user set username=#{username},password=#{password},account=#{account} where id=#{id}
</update>
<delete id="deleteUser" parameterType="int">
delete from t_user where id=#{id}
</delete>
<select id="selectUserById" parameterType="int" resultMap="userMap">
select * from t_user where id=#{id}
</select>
<select id="selectAllUser" resultMap="userMap">
select * from t_user
</select>
</mapper>
這時需要為mybatis.cfg.xml里注冊UserMapper.xml文件今野。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 引入外部配置文件 -->
<properties resource="mysql.properties"></properties>
<!-- 為JAVA Bean起類別名 -->
<typeAliases >
<!-- 別名方式1,一個一個的配置 type中放置的是類的全路徑罐农,alias中放置的是類別名
<typeAliase type="com.cy.mybatis.beans.UserBean" alias="UserBean"/> -->
<!-- 別名方式2条霜,自動掃描,將JAVA類的類名作為類的類別名 -->
<package name="com.cy.mybatis.beans"/>
</typeAliases>
<!-- 配置mybatis運(yùn)行環(huán)境 -->
<environments default="cybatis">
<environment id="cybatis">
<!-- type="JDBC" 代表使用JDBC的提交和回滾來管理事務(wù) -->
<transactionManager type="JDBC" />
<!-- mybatis提供了3種數(shù)據(jù)源類型涵亏,分別是:POOLED,UNPOOLED,JNDI -->
<!-- POOLED 表示支持JDBC數(shù)據(jù)源連接池 -->
<!-- UNPOOLED 表示不支持?jǐn)?shù)據(jù)源連接池 -->
<!-- JNDI 表示支持外部數(shù)據(jù)源連接池 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 告知映射文件方式1宰睡,一個一個的配置
<mapper resource="com/cy/mybatis/mapper/UserMapper.xml"/>-->
<!-- 告知映射文件方式2,自動掃描包內(nèi)的Mapper接口與配置文件 -->
<package name="com/cy/mybatis/mapper"/>
</mappers>
</configuration>
8)需要建立一個工具類文件
package com.cy.mybatis.tools;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class DBTools {
public static SqlSessionFactory sessionFactory;
static{
try {
//使用MyBatis提供的Resources類加載mybatis的配置文件
Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml");
//構(gòu)建sqlSession的工廠
sessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
//創(chuàng)建能執(zhí)行映射文件中sql的sqlSession
public static SqlSession getSession(){
return sessionFactory.openSession();
}
}
9)寫個測試
package com.cy.mybatis.service;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.cy.mybatis.beans.UserBean;
import com.cy.mybatis.tools.DBTools;
import com.cy.mybatis.mapper.UserMapper;
public class UserService {
public static void main(String[] args) {
insertUser(); //添加
// deleteUser(); //刪除
// selectUserById(); //根據(jù)id查詢
// selectAllUser(); //查詢?nèi)? }
/**
* 新增用戶
*/
private static void insertUser() {
SqlSession session = DBTools.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
UserBean user = new UserBean("懿", "1314520", 7000.0);
try {
mapper.insertUser(user);
System.out.println(user.toString());
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
/**
* 刪除用戶
*/
private static void deleteUser(){
SqlSession session=DBTools.getSession();
UserMapper mapper=session.getMapper(UserMapper.class);
try {
mapper.deleteUser(1);
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
/**
* 根據(jù)id查詢用戶
*/
private static void selectUserById(){
SqlSession session=DBTools.getSession();
UserMapper mapper=session.getMapper(UserMapper.class);
try {
UserBean user= mapper.selectUserById(2);
System.out.println(user.toString());
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
/**
* 查詢所有的用戶
*/
private static void selectAllUser(){
SqlSession session=DBTools.getSession();
UserMapper mapper=session.getMapper(UserMapper.class);
try {
List<UserBean> user=mapper.selectAllUser();
System.out.println(user.toString());
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
}
測試結(jié)果
insert气筋。
每件事都需要堅持拆内!