一、概述
mybatis是一個(gè)持久層框架,用java編寫的。
它封裝了jdbc操作的很多細(xì)節(jié),使開發(fā)者只需要關(guān)注sql語句本身,而無需關(guān)注注冊驅(qū)動(dòng),創(chuàng)建連接等繁雜過程
它使用了ORM思想實(shí)現(xiàn)了結(jié)果集的封裝。
- ORM:
Object Relational Mappging 對象關(guān)系映射
簡單的說:
就是把數(shù)據(jù)庫表和實(shí)體類及實(shí)體類的屬性對應(yīng)起來
讓我們可以操作實(shí)體類就實(shí)現(xiàn)操作數(shù)據(jù)庫表。
二、mybatis的入門
mybatis的環(huán)境搭建
- 創(chuàng)建maven工程并導(dǎo)入坐標(biāo)
- 創(chuàng)建實(shí)體類和dao的接口
- 創(chuàng)建Mybatis的主配置文件
SqlMapConifg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-////DTD Config 3.0//EN"
"http:///dtd/mybatis-3-config.dtd">
<!--mybatis的主配置文件-->
<configuration>
<!--配置環(huán)境-->
<environments default="mysql">
<!--配置mysql的環(huán)境-->
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/eesy?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="15436132"/>
</dataSource>
</environment>
</environments>
<!--指定映射配置文件的位置,映射配置文件指的是每個(gè)dao配置的文件-->
<mappers>
<mapper resource="com/zg/IUserDao.xml"/>
</mappers>
</configuration>
- 創(chuàng)建映射配置文件
IUserDao.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-////DTD Mapper 3.0//EN"
"http:///dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zg.dao.IUserDao" resultType="com.zg.domain.User">//namespace屬性的取值必須是dao接口的全限定類名
<select id="findAll">
select * from user
</select>
</mapper>
環(huán)境搭建的注意事項(xiàng):
- 創(chuàng)建IUserDao.xml 和 IUserDao.java時(shí)名稱是為了和我們之前的知識保持一致。
在Mybatis中它把持久層的操作接口名稱和映射文件也叫做:Mapper
所以:IUserDao 和 IUserMapper是一樣的
- 在idea中創(chuàng)建目錄的時(shí)候,它和包是不一樣的
包在創(chuàng)建時(shí):com.itheima.dao它是三級結(jié)構(gòu)
目錄在創(chuàng)建時(shí):com.itheima.dao是一級目錄
- mybatis的映射配置文件位置必須和dao接口的包結(jié)構(gòu)相同
- 映射配置文件的mapper標(biāo)簽namespace屬性的取值必須是dao接口的全限定類名
- 映射配置文件的操作配置(select),id屬性的取值必須是dao接口的方法名
當(dāng)我們遵從了3,4,5點(diǎn)之后,我們在開發(fā)中就無須再寫dao的實(shí)現(xiàn)類。
三、mybatis的入門案例
除了上面所示代碼,還有
實(shí)體類:User
public class User implements Serializable {
private Integer id;
private String username;
private Date Birthday;
private String sex;
private String address;
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 Date getBirthday() {
return Birthday;
}
public void setBirthday(Date birthday) {
Birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{"
"id=" id
", username='" username '\''
", Birthday=" Birthday
", sex='" sex '\''
", address='" address '\''
'}';
}
}
持久層接口:IUserDao
public interface IUserDao {
List<User> findAll();
}
Test:
public class MybatisTest {
/**
* 入門案例
* @param args
*/
public static void main(String[] args)throws Exception {
//1.讀取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.創(chuàng)建SqlSessionFactory工廠
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工廠生產(chǎn)SqlSession對象
SqlSession session = factory.openSession();
//4.使用SqlSession創(chuàng)建Dao接口的代理對象
IUserDao userDao = session.getMapper(IUserDao.class);
//5.使用代理對象執(zhí)行方法
List<User> users = userDao.findAll();
for(User user : users){
System.out.println(user);
}
//6.釋放資源
session.close();
in.close();
}
}
Mybatis基于注解的入門案例:
- 把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL語句
public interface IUserDao {
/**
* 查詢所有操作
* @return
*/
@Select("select * from user")
List<User> findAll();
}
- 同時(shí)需要在SqlMapConfig.xml中的mapper配置時(shí),使用class屬性指定dao接口的全限定類名。
<mappers>
<mapper class="com.zg.dao.IUserDao"/>
</mappers>
明確:
我們在實(shí)際開發(fā)中,都是越簡便越好,所以都是采用不寫dao實(shí)現(xiàn)類的方式。不管使用XML還是注解配置。但是Mybatis它是支持寫dao實(shí)現(xiàn)類的。
Mybatis使用代理Dao實(shí)現(xiàn)功能的代碼分析:

四、自定義Mybatis的分析
mybatis在使用代理dao的方式實(shí)現(xiàn)增刪改查時(shí)做什么事呢?
只有兩件事:
第一:創(chuàng)建代理對象
第二:在代理對象中調(diào)用selectList
自定義mybatis能通過入門案例看到的類
class Resources
class SqlSessionFactoryBuilder
interface SqlSessionFactory
interface SqlSession


來源:https://www./content-4-393451.html
|