前言
上篇简单介绍了Mybatis的简单实用,本篇先对上次实验环境的一些内容进行优化,然后验证Mybatis的XML配置以及注解方式。
实验环境优化
数据库配置
在mybatis的配置文件中,引入数据库配置文件db.properties,然后修改配置文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
name=root
password=admin
mybatis配置文件mybatis-config.xml
/p>
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
实体类定义别名
没有为实体定义别名时,在sql映射xml中应用实体时,比如parameterType resultType 中就需要配置实体的全路径名(全限定名)。
当为实体定义了别名后,映射文件中可以直接配置实体的别名即可。因此为实体类定义别名,可以简化Sql映射xml文件中对实体的引用配置。
mybatis配置文件中定义实体别名有两种方式:
typeAlias 单个为每个实体定义别名 当实体类比较多是 配置增多 不方便
package 指定实体的包 会自动为改包下的所有实体自动设定各自的类名为别名
优化后的Mybatis配置文件mybatis-config.xml
/p>
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
Mybatis实现方式
分别使用XML和注解的方式实现对User的CURD。XML方式
sql中参数定义为 #{} 在Mybatis配置文件中已经配置对实体类的自动设置别名,因此此处可以直接使用实体类的别名进行引用。
/p>
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
select * from users where id = #{id}
delete from users where id = #{id}
update users set name = #{name},age = #{age} where id = #{id}
insert into users(name,age) values(#{name},#{age})
select * from users
1 packagecom.lion.test;2
3 importjava.io.IOException;4 importjava.util.List;5
6 importorg.apache.ibatis.session.SqlSession;7 importorg.apache.ibatis.session.SqlSessionFactory;8 importorg.junit.Test;9
10 importcom.lion.pojo.User;11 importcom.lion.util.MybatisUtils;12
13 public classTestUserCURDByXML {14
15 @Test16 public voidtestAdd() {17 try{18 SqlSessionFactory factory =MybatisUtils.getFactory();19 SqlSession session =factory.openSession();20
21 String statement = "com.lion.mapper.UserMapper.addUser";22 //id mysql设置的自增长 此处设为 -1
23 User user = new User(-1, "Spring", 25);24 session.insert(statement, user);25
26 //不提交的话 数据无法提交到数据库
27 session.commit();28 session.close();29 } catch(IOException e) {30 e.printStackTrace();31 }32 }33
34 @Test35 public voidtestDelete() {36 try{37 SqlSessionFactory factory =MybatisUtils.getFactory();38 //自动提交事务
39 SqlSession session = factory.openSession(true);40
41 String statement = "com.lion.mapper.UserMapper.deleteUser";42 session.delete(statement, 4);43
44 session.close();45 } catch(IOException e) {46 e.printStackTrace();47 }48 }49
50 @Test51 public voidtestUpdate() {52 try{53 SqlSessionFactory factory =MybatisUtils.getFactory();54 //自动提交事务
55 SqlSession session = factory.openSession(true);56
57 String statement = "com.lion.mapper.UserMapper.updateUser";58 User user = new User(1, "mali", 18);59 session.update(statement, user);60
61 session.close();62 } catch(IOException e) {63 e.printStackTrace();64 }65 }66
67 @Test68 public voidtestSelect() {69 try{70 SqlSessionFactory factory =MybatisUtils.getFactory();71 //自动提交事务
72 SqlSession session = factory.openSession(true);73
74 String statement = "com.lion.mapper.UserMapper.selectAll";75 List users =session.selectList(statement);76 for(User user : users) {77 System.out.println(user);78 }79
80 session.close();81 } catch(IOException e) {82 e.printStackTrace();83 }84 }85
86 }
注解方式
packagecom.lion.testAnnotation;importjava.util.List;importorg.apache.ibatis.annotations.Delete;importorg.apache.ibatis.annotations.Insert;importorg.apache.ibatis.annotations.Select;importorg.apache.ibatis.annotations.Update;importcom.lion.pojo.User;public interfaceUserMapper {
@Insert("insert into users(name,age) values(#{name},#{age})")intinsertUser(User user);
@Delete("delete from users where id = #{id}")int deleteUser(intid);
@Update("update users set name = #{name},age = #{age} where id = #{id}")intupdateUser(User user);
@Select("select * from users where id = #{id}")
User selectUser(intid);
@Select("select * from users")
ListselectAll();
}
Mybatis配置文件中注册映射接口 class
针对同一实体的映射文件不能放到同一个包中。
1 packagecom.lion.testAnnotation;2
3 importjava.io.IOException;4 importjava.util.List;5
6 importorg.apache.ibatis.session.SqlSession;7 importorg.apache.ibatis.session.SqlSessionFactory;8 importorg.junit.Before;9 importorg.junit.Test;10
11 importcom.lion.pojo.User;12 importcom.lion.util.MybatisUtils;13
14 public classTestUserCURDByAnnotaion2 {15
16 privateSqlSessionFactory factory;17
18 @Before19 public voidloadFactory() {20 try{21 factory =MybatisUtils.getFactory();22 } catch(IOException e) {23 e.printStackTrace();24 }25 }26
27 @Test28 public voidtestAdd() {29 SqlSession session = factory.openSession(true);30 //映射器
31 UserMapper mapper = session.getMapper(UserMapper.class);32
33 int i = mapper.insertUser(new User(-1, "xiazis", 24));34
35 System.out.println(i);36
37 session.close();38
39 }40
41 @Test42 public voidtestDelete() {43 SqlSession session = factory.openSession(true);44 //映射器
45 UserMapper mapper = session.getMapper(UserMapper.class);46
47 int i = mapper.deleteUser(1);48
49 System.out.println(i);50
51 session.close();52
53 }54
55 @Test56 public voidtestUpdate() {57 SqlSession session = factory.openSession(true);58 //映射器
59 UserMapper mapper = session.getMapper(UserMapper.class);60
61 int i = mapper.updateUser(newUser());62
63 System.out.println(i);64
65 session.close();66
67 }68
69 @Test70 public voidtestSelect() {71 SqlSession session = factory.openSession(true);72 //映射器
73 UserMapper mapper = session.getMapper(UserMapper.class);74
75 User user = mapper.selectUser(2);76
77 System.out.println(user);78
79 session.close();80
81 }82
83 @Test84 public voidtestSelectAll() {85 SqlSession session = factory.openSession(true);86 //映射器
87 UserMapper mapper = session.getMapper(UserMapper.class);88
89 List users =mapper.selectAll();90
91 for(User user : users) {92 System.out.println(user);93 }94
95 session.close();96
97 }98
99 }