java之 MyBatis(一)
0x01、Mybatis配置
1:创建maven工程并导入坐标
2:创建实体类和dao的接口
3:创建Mybatis的主配置文件(名字随意)
SqlMapConifg.xml
4:创建映射配置文件UserDao.xml
-
1、导入坐标
mysql mysql-connector-java 5.1.47 org.mybatis mybatis 3.5.3 -
2、创建User实体类
public class User implements Serializable{
private int uid; //用户id
private String username;// 用户姓名
private String sex;// 性别
private Date birthday;// 生日
private String address;// 地址
}
- 3、创建 UserDao 接口
- UserDao 接口就是我们的持久层接口(也可以写成 UserMapper) .我们就写成UserDao ,具体代码如下:
public interface UserDao {
public List<User> findAll();
}
- 4、创建 UserDao.xml 映射文件
注意:
- 映射配置文件存储的路径在resources里面,要和对应的Dao接口的路径保持一致
- 映射配置文件的文件名必须和Dao接口名保持一致
- 一定要引入约束文件
<?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">
<!--namespace属性: 接口类的全限定名-->
<mapper namespace="com.itheima.day01.dao.UserDao">
<!--
每一个子标签,就对应Dao接口中的一个方法
查询方法就对应select标签
添加方法就对应insert标签
删除方法就对应delete标签
修改方法就对应update标签
标签的id就对应方法的名字
标签的parameterType就对应方法的参数类型
标签的resultType(只有select标签才有)就对应方法的返回值类型,如果返回值类型是List,那么
resultType就是List的泛型类型
-->
<select id="findAll" resultType="com.itheima.day01.Pojo.User">
select * from t_user
</select>
</mapper>
- 5、创建 SqlMapConfig.xml 配置文件(核心配置文件)
注意事项
- 存放路径必须是resources的根路径
- 配置文件的名字,随便写
- 一定要引入约束文件
<?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>
<!--配置连接数据库的环境 default:指定使用哪一个环境-->
<environments default="dev">
<environment id="dev">
<!--配置事务,MyBatis事务用的是jdbc-->
<transactionManager type="JDBC"/>
<!--配置连接池, POOLED:使用连接池(mybatis内置的); UNPOOLED:不使用连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
<environment id="test">
<!--配置事务,MyBatis事务用的是jdbc-->
<transactionManager type="JDBC"/>
<!--配置连接池, POOLED:使用连接池(mybatis内置的); UNPOOLED:不使用连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/库名?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--引入映射文件; resource属性: 映射文件的路径-->
<!-- 类似:com/itheima/dao/UserDao.xml -->
<mapper resource="com/itheima/day01/dao/Config.xml"/>
</mappers>
</configuration>
代码实例:
package com.itheima;
import com.itheima.dao.UserDao;
import com.itheima.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
public class Demo {
private UserDao userDao;
private SqlSession sqlSession;
private InputStream is;
@Before
public void init() throws IOException {
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
is = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory SessionFactory = sqlSessionFactoryBuilder.build(is);
sqlSession = SessionFactory.openSession();
userDao = sqlSession.getMapper(UserDao.class);
}
@Test
public void findAll() throws IOException {
List<User> userList = userDao.findAll();
for (User user : userList) {
System.out.println(user);
}
}
// @Test
// public void testAddUser(){
// User user = new User(0, "jay", "男", new Date(), "台湾");
// userDao.addUser(user);
// }
@After
public void destroy() throws IOException {
sqlSession.commit();
sqlSession.close();
is.close();
}
}
0x02、Mapper映射接口开发
-
存储路径建议和对应的Dao接口保持一致
-
文件名建议和对应Dao接口的名字保持一致
-
配置文件的根标签的namespace属性必须和对应的Dao接口的全限定名保持一致
-
接口中的每一个方法,就对应映射配置文件中的一个标签:
- 查询方法,对应select标签
- 添加方法,对应insert标签
- 删除方法,对应delete标签
- 修改方法,对应update标签
-
映射配置文件中的标签的id属性,就必须和对应的方法的方法名保持一致
-
映射配置文件中的标签的parameterType属性,必须和对应的方法的参数类型(全限定名)保持一致
- 映射配置文件中的标签的resultType属性,必须和对应的方法的返回值类型(全限定名)保持一致,但是如果返回值是List则和其泛型保持一致
<?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.itheima.dao.UserDao">
<select id="findAll" resultType="com.itheima.pojo.User">
select * from t_user
</select>
<insert id="addUser" parameterType="com.itheima.pojo.User" >
insert into t_user values (null,#{username},#{sex},#{birthday},#{address})
</insert>
<delete id="deleteById" parameterType="java.lang.Integer">
delete from t_user where uid=#{id}
</delete>
<update id="updateUser" parameterType="com.itheima.pojo.User">
update t_user set username=#{username},sex=#{sex},address=#{address} where uid=#{uid}
</update>
<select id="findById" parameterType="java.lang.Integer" resultType="com.itheima.pojo.User">
select * from t_user where uid=#{uid}
</select>
</mapper>
0x03、核心配置文件
- 核心配置文件的顺序
- properties
- typeAliases
- Mapper
1、properties
- jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.user=root
jdbc.password=root
- 引入到核心配置文件
<configuration>
<properties resource="jdbc.properties">
</properties>
<!--数据源配置-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="UNPOOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
....
</configuration>
2、typeAliases(类型别名)
2.1定义单个别名
- 核心配置文件
<typeAliases>
<typeAlias type="com.itheima.bean.User" alias="user"></typeAlias>
</typeAliases>
- 修改UserDao.xml
<select id="findAll" resultType="user">
SELECT * FROM user
</select>
2.2批量定义别名
使用package定义的别名:就是pojo的类名,大小写都可以
- 核心配置文件
<typeAliases>
<package name="com.itheima.bean"/>
</typeAliases>
- 修改UserDao.xml
<select id="findAll" resultType="user">
SELECT * FROM user
</select>
3、Mapper
3.1方式一:引入映射文件路径
<mappers>
<mapper resource="com/itheima/dao/UserDao.xml"/>
</mappers>
3.2方式二:扫描接口
- 配置单个接口
<mappers>
<mapper class="com.itheima.dao.UserDao"></mapper>
</mappers>
- 批量配置
<mappers>
<package name="com.itheima.dao"></package>
</mappers>
0x04、注解配置
我们只需要在接口处加一个select的注解就可以了
package com.test.dao;
import com.test.domain.User;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface Userdao {
@Select("select * from user")
List<User> findAll();
}
这样我们就可以删除前面创建的userdao.xml文件。
使用注解配配置,还需要修改一下SqlMapConfig.xml的配置
原本的xml配置:
<mappers>
<mapper resource="com/test/dao/Userdao.xml"/>
</mappers>
改为:
<mappers>
<mapper class="com.test.dao.Userdao"/>
</mappers>
mapper 这里使用注解使用class指定被select注解的接口就完成了。
总结
- properties 引入properties文件的
- 创建properties文件
- 使用
<properties resource="文件的路径"/>
- 使用 $
- typeAliases(类型别名) 在Dao映射文件里面 直接写类(pojo)的名字, 不需要写类全限定名了
<typeAliases>
<package name="com.itheima.bean"/>
</typeAliases>
- Mapper 引入Dao映射文件的
<mappers>
<package name="com.itheima.dao"></package>
</mappers>