一、创建主配置文件:SqlMapConfig
1、resource->SqlMapConfig.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">
<!--mybatis的主配置文件-->
<configuration>
<!--配置环境-->
<environments default="mysql">
<!--配置MySQL环境-->
<environment id="mysql">
<!--配置事务类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源,连接数据库的基本信息-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--指定映射配置文件的位置,映射配置文件是每个dao独立的配置文件-->
<mappers>
<mapper resource="com/hu/dao/IUserDao.xml"/>
</mappers>
</configuration>
二、创建映射配置文件:创建成三级目录
1、对应主配置文件的<mapper resource="com/hu/dao/IUserDao.xml"/>
在resource中添加对应的包及.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hu.dao.IUserDao">
<!--配置查询所有,id为查询的方法名称-->
<select id="findAll">select * from user</select>
</mapper>
三、注意事项
1、创建IUserDao.java
和IUserDao.xml
名字相同是为了方便使用,在MyBatis中把持久层的操作接口名称和映射文件也叫:Mapper
。所有IUserDao
和IUserMapper
是相同的。
2、在IDEA中创建目录和包是不同的。包在创建时com.hu.dao
时三级结构,目录在创建时时一级结构可以通过如下方式调整。
3、MyBatis的映射配置文件必须和dao包的目录相同
4、映射配置文件的mapper
标签namespace
属性的取值必须是dao接口的全限定类名。
5、映射配置文件的操作配置select...
,id属性的取值必须是dao接口的增删改查的方法名。
当遵从了3、4、5点之后,在开发中就无需再写dao的具体实现类,只需要写接口及方法名即可
四、入门案例
1、主配置文件:SqlMapConfig.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">
<!--mybatis的主配置文件-->
<configuration>
<!--配置环境-->
<environments default="mysql">
<!--配置MySQL环境-->
<environment id="mysql">
<!--配置事务类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源,连接数据库的基本信息-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?serverTimezone=UTC "/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--指定映射配置文件的位置,映射配置文件是每个dao独立的配置文件-->
<mappers>
<mapper resource="com/hu/dao/IUserDao.xml"/>
</mappers>
</configuratio
2、映射配置文件IUserDao.xml
:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hu.dao.IUserDao">
<!--配置查询所有,id为查询的方法名称,ResultType用于设置查询返回结果的封装类型-->
<select id="findAll" resultType="com.hu.bean.User">select * from user</select>
</mapper>
3、Javabean : User
public class User implements Serializable {
private int id;
private String name;
private String password;
public User(int id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
public User(){
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
4、接口IUserDao:
/**
* 用户持久层接口
*/
public interface IUserDao {
List<User> findAll();
}
6、测试方法:
/**
* 入门案例
* @param args
*/
public static void main(String[] args) throws IOException {
//1、读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2、创建SqlSessionFactory工厂,mybatis使用了构建者模式(包工头盖工厂,把钱(in)给了包工头进行build)
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3、使用工厂生产SqlSession对象,工厂模式生产SqlSession(解耦)
SqlSession session = factory.openSession();
//4、使用SqlSession创建dao接口的代理对象,代理模式不修改源码的基础上对已有方法增强
IUserDao userDao = session.getMapper(IUserDao.class);
//5、使用代理对象执行方法
List<User> lists= userDao.findAll();
for(User user:lists)
{
System.out.println(user.toString());
}
//6、释放资源
session.close();
in.close();
}
}