Mybatis基础入门学习
mybatis架构分析
搭建测试mybatis架构
(1)下载并导入mybatis3.2.7.jar(架构),mysql-connector-java-5.1.7-bin.jar(数据库驱动),junit-4.9.jar(单元测试)
(2)测试mybatis项目搭建
(3)Jdbc资源文件
1 jdbc.driver=com.mysql.jdbc.Driver
2 jdbc.url=jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf-8
3 jdbc.username=账号
4 jdbc.password=密码
(4)Mybatis核心配置文件
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
3 "http://mybatis.org/dtd/mybatis-3-config.dtd">
4 <configuration>
5 <!-- 数据库资源文件 -->
6 <properties resource="jdbc.properties"/>
7
8 <!-- 别名:方便映射文件调用 -->
9 <typeAliases>
10 <!-- 这个有弊端:有多少pojo就要配置多少个 -->
11 <!--<typeAlias type="com.pojo.User" alias="user"/>-->
12 <!-- 所以用包的方式:扫描该包及其子包的所有pojo,并取别名为(如:user或User) -->
13 <package name="com.pojo"/>
14 </typeAliases>
15
16 <!-- 数据库环境,与Spring整合后,environments标签将废除-->
17 <environments default="development">
18 <environment id="development">
19 <!-- 使用JDBC事务管理 -->
20 <transactionManager type="JDBC"/>
21 <!-- 数据库连接池 -->
22 <dataSource type="POOLED">
23 <!--<property name="driver" value="com.mysql.jdbc.Driver"/>
24 <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
25 <property name="username" value="root"/>
26 <property name="password" value="admins"/>-->
27
28 <property name="driver" value="${jdbc.driver}"/>
29 <property name="url" value="${jdbc.url}"/>
30 <property name="username" value="${jdbc.username}"/>
31 <property name="password" value="${jdbc.password}"/>
32 </dataSource>
33 </environment>
34 </environments>
35
36 <!-- 映射器的位置 -->
37 <mappers>
38 <!--<mapper resource="com/mapper/UserMapper.xml"/>-->
39 <!-- 3个属性只能取一个,当为class时,xml文件和接口文件必须文件名一样且在同一个包下 -->
40 <!--<mapper class="com.mapper.UserMapper"/>-->
41 <!-- url:该属性指定mapper在盘符下的绝对路径,不建议使用 -->
42
43 <!-- 上面的弊端还是会太多配置,导包的原则和class一样 -->
44 <package name="com.mapper"/>
45 </mappers>
46 </configuration>
(5)日志文件
1 #日志文件
2 log4j.rootLogger=DEBUG,stdout
3 log4j.logger.org.mybatis=DEBUG
4 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
5 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
6 log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n
(6)创建一个User类
1 package com.pojo;
2
3 import java.io.Serializable;
4 import java.util.Date;
5
6 /**
7 * Serializable:序列化接口
8 */
9 public class User implements Serializable {
10 private static final long serialVersionUID = 1L;
11 private Integer id;
12 private String username;// 用户姓名
13 private String sex;// 性别
14 private Date birthday;// 生日
15 private String address;// 地址
16
17 public Integer getId() {
18 return id;
19 }
20 public void setId(Integer id) {
21 this.id = id;
22 }
23 public String getUsername() {
24 return username;
25 }
26 public void setUsername(String username) {
27 this.username = username;
28 }
29 public String getSex() {
30 return sex;
31 }
32 public void setSex(String sex) {
33 this.sex = sex;
34 }
35 public Date getBirthday() {
36 return birthday;
37 }
38 public void setBirthday(Date birthday) {
39 this.birthday = birthday;
40 }
41 public String getAddress() {
42 return address;
43 }
44 public void setAddress(String address) {
45 this.address = address;
46 }
47 @Override
48 public String toString() {
49 return "User [id=" + id + ", username=" + username + ", sex=" + sex
50 + ", birthday=" + birthday + ", address=" + address + "]";
51 }
52 }
(7)User类的映射器
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
4 <!-- 命名空间:用于区分;如test.findUserById -->
5 <mapper namespace="com.mapper.UserMapper">
6 <!-- 通过ID查询一个用户 -->
7 <select id="findUserById" parameterType="Integer" resultType="User">
8 <!-- #{}:表示占位符 -->
9 select * from user where id=#{v}
10 </select>
11
12 <!-- 根据用户名模糊查询用户 -->
13 <select id="findUserByName" parameterType="String" resultType="com.pojo.User">
14 <!-- ${}:表示字符串拼接 -->
15 -- select * from user where username like '%${value}%'
16 <!-- 防sql注入 -->
17 select * from user where username like "%"#{value}"%"
18 </select>
19
20 <!-- 添加用户 -->
21 <insert id="addUser" parameterType="com.pojo.User">
22 <!-- 获取最新的ID主键 -->
23 <selectKey keyProperty="id" resultType="Integer" order="AFTER">
24 select LAST_INSERT_ID()
25 </selectKey>
26 insert into user (username,birthday,address,sex)
27 values (#{username},#{birthday},#{address},#{sex})
28 </insert>
29
30 <!-- 更新用户 -->
31 <update id="updateUserById" parameterType="com.pojo.User">
32 update user
33 set username=#{username},birthday=#{birthday},address=#{address},sex=#{sex}
34 where id=#{id}
35 </update>
36
37 <!-- 删除用户 -->
38 <delete id="delUserById" parameterType="Integer">
39 delete from user where id=#{id}
40 </delete>
41 </mapper>
(8)与映射器绑定的接口
1 package com.mapper;
2
3 import com.pojo.User;
4
5 /**
6 * @author: 肖德子裕
7 * @date: 2018/8/30 10:02
8 * @description: 实现用户增删改查的接口(映射器)
9 * 遵循四个原则
10 * 1)接口方法名与xml文件标签id一样
11 * 2)方法返回值类型与xml文件一样
12 * 3)方法的参数与xml文件一样
13 * 4)xml文件命名空间与该接口绑定
14 */
15 public interface UserMapper {
16 public User findUserById(Integer id);
17 }
(9)测试mybatis实现增删改查
1 package com.junit;
2
3 import com.pojo.User;
4 import org.apache.ibatis.io.Resources;
5 import org.apache.ibatis.session.SqlSession;
6 import org.apache.ibatis.session.SqlSessionFactory;
7 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
8 import org.junit.Test;
9
10 import java.io.InputStream;
11 import java.util.Date;
12 import java.util.List;
13
14 /**
15 * @author: 肖德子裕
16 * @date: 2018/8/29 23:18
17 * @description: 单元测试mybatis的增删改查
18 */
19 public class UnitTest {
20 //根据用户ID查询用户
21 @Test
22 public void testMybatis() throws Exception{
23 //加载核心配置文件
24 String resource="sqlMapConfig.xml";
25 InputStream in= Resources.getResourceAsStream(resource);
26 //创建sqlSessionFactory
27 SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(in);
28 //创建sqlSession
29 SqlSession sqlSession=sqlSessionFactory.openSession();
30 //执行sql语句
31 User user=sqlSession.selectOne("com.mapper.UserMapper.findUserById",10);
32 System.out.println(user);
33 }
34
35 //根据用户名模糊查询用户
36 @Test
37 public void testFindUserByName() throws Exception{
38 //加载核心配置文件
39 String resource="sqlMapConfig.xml";
40 InputStream in= Resources.getResourceAsStream(resource);
41 //创建sqlSessionFactory
42 SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(in);
43 //创建sqlSession
44 SqlSession sqlSession=sqlSessionFactory.openSession();
45 //执行sql语句
46 List<User> users=sqlSession.selectList("com.mapper.UserMapper.findUserByName","五");
47 for (User user:users){
48 System.out.println(user);
49 }
50 }
51
52 //添加用户
53 @Test
54 public void testAddUser() throws Exception{
55 //加载核心配置文件
56 String resource="sqlMapConfig.xml";
57 InputStream in= Resources.getResourceAsStream(resource);
58 //创建sqlSessionFactory
59 SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(in);
60 //创建sqlSession
61 SqlSession sqlSession=sqlSessionFactory.openSession();
62 //执行sql语句
63 User user=new User();
64 user.setUsername("judy");
65 user.setSex("男");
66 user.setBirthday(new Date());
67 user.setAddress("珠海");
68 int i=sqlSession.insert("com.mapper.UserMapper.addUser",user);
69 //提交事务
70 sqlSession.commit();
71 System.out.println(user.getId());
72 }
73
74 //更新用户
75 @Test
76 public void testUpdateUserById() throws Exception{
77 //加载核心配置文件
78 String resource="sqlMapConfig.xml";
79 InputStream in= Resources.getResourceAsStream(resource);
80 //创建sqlSessionFactory
81 SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(in);
82 //创建sqlSession
83 SqlSession sqlSession=sqlSessionFactory.openSession();
84 //执行sql语句
85 User user=new User();
86 user.setId(28);
87 user.setUsername("judy");
88 user.setSex("女");
89 user.setBirthday(new Date());
90 user.setAddress("珠海");
91 int i=sqlSession.update("com.mapper.UserMapper.updateUserById",user);
92 //提交事务
93 sqlSession.commit();
94 }
95
96 //删除用户
97 @Test
98 public void testDelUserById() throws Exception{
99 //加载核心配置文件
100 String resource="sqlMapConfig.xml";
101 InputStream in= Resources.getResourceAsStream(resource);
102 //创建sqlSessionFactory
103 SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(in);
104 //创建sqlSession
105 SqlSession sqlSession=sqlSessionFactory.openSession();
106 //执行sql语句
107 sqlSession.delete("com.mapper.UserMapper.delUserById",28);
108 //提交事务
109 sqlSession.commit();
110 }
111 }