什么是 MyBatis
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
SpringBoot 中使用
使用 Maven
在你的pom.xml中:
1
2
3
4
5
|
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version> 1.2 . 1 -SNAPSHOT</version>
</dependency>
|
使用 Gradle
在你的 build.gradle中:
1
2
3
|
dependencies {
compile( "org.mybatis.spring.boot:mybatis-spring-boot-starter:1.2.1-SNAPSHOT" )
}
|
使用
目录结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
--src
--main
--java
--com.example
--dao
--UserDao.java
--entity
--User.java
--DemoApplication.java
--UserSex.java
--resources
--mapper
--UserMapper.xml
--application.properties
|
基于注解
使用MyBatis-Spring-Boot-Starter will:
将自动检测存在的数据源
将数据源输入然后创建注册一个SqlSessionFactoryBean实例
从SqlSessionFactoryBean中创建注册一个SqlSessionTemplate实例
自动扫描你的 mappers,将它们连接到SqlSessionTemplate然后将它们注册到 Spring 的上下文
我们新建一个实体类User.java,在这里我们使用 Lombok (使用说明见这篇文章)来简化代码
1
2
3
4
5
6
7
8
|
@Data
public class User {
private Long id;
private String userName;
private String password;
private UserSex userSex;
private String nickName;
}
|
接着我们创建一张叫 user的表
1
2
3
4
5
6
7
8
9
|
DROP TABLE IF EXISTS user;
CREATE TABLE user(
id BIGINT( 20 ) NOT NULL AUTO_INCREMENT COMMENT '主键id' ,
user_name VARCHAR( 32 ) DEFAULT NULL COMMENT '用户名' ,
password VARCHAR( 32 ) DEFAULT NULL COMMENT '密码' ,
user_sex VARCHAR( 32 ) DEFAULT NULL ,
nick_name VARCHAR( 32 ) DEFAULT NULL ,
PRIMARY KEY (id)
) ENGINE = InnoDB DEFAULT CHARSET = utf8;
|
然后创建一个 Dao 文件UserDao.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@Mapper
public interface UserDao {
@Select ( "SELECT * FROM user WHERE id = #{id}" )
@Results ({
@Result (property = "userName" , column = "user_name" ),
@Result (property = "password" , column = "password" ),
@Result (property = "userSex" , column = "user_sex" , javaType = UserSex. class ),
@Result (property = "nickName" ,column = "nick_name" )
})
User findById( @Param ( "id" ) Long id);
@Insert ( "INSERT INTO user (user_name,password,user_sex ) VALUES (#{userName},#{password},#{userSex})" )
void save(User user);
@Update ( "UPDATE user set user_name = #{userName}, nick_name = #{nickName} WHERE id = #{id}" )
void update(User user);
@Delete ( "DELETE FROM user where id = #{id}" )
void remove(Long id);
}
|
每个方法都对应的对应的 sql 语句,其中@Select注解用于查询,@Result注解将实体类属性跟数据库的字段一一对应,@Insert注解用于插入数据,@Update注解用于修改数据,@Delete注解用于删除
接下来我们简单的测试下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
@RunWith (SpringRunner. class )
@SpringBootTest
public class UserMapperTest {
@Autowired
UserDao userDao;
@Test
public void test(){
User one = new User();
one.setUserName( "张三" );
one.setPassword( "123456" );
one.setUserSex(UserSex.MAN);
userDao.save(one);
User two = new User();
two.setUserName( "李四" );
two.setPassword( "123456" );
two.setUserSex(UserSex. WOMAN);
userDao.save(two);
}
}
|
结果如下
结果
基于 XML 配置
在application.properties配置文件中新增以下配置
1
2
|
mybatis.type-aliases- package = com.example.entity
mybatis.mapper-locations=classpath:mapper/*.xml
|
然后在resources文件夹中创建mapper文件夹,然后新建一个userMapper.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<?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.example.dao.UserDao" >
<resultMap id= "userMap" type= "com.example.entity.User" >
<result column= "id" property= "id" />
<result column= "user_name" property= "userName" />
<result column= "password" property= "password" />
<result column= "user_sex" property= "userSex" javaType= "com.example.UserSex" />
<result column= "nick_name" property= "nickName" />
</resultMap>
<insert id= "save" parameterType= "com.example.entity.User" >
INSERT INTO user (user_name,password,user_sex ) VALUES (#{userName},#{password},#{userSex})
</insert>
<delete id= "remove" parameterType= "java.lang.Long" >
DELETE FROM user where id = #{id}
</delete>
<update id= "update" parameterType= "com.example.entity.User" >
UPDATE user SET user_name = #{userName}, nick_name =#{nickName} WHERE id = #{id}
</update>
<select id= "findById" parameterType= "java.lang.Long" resultMap= "userMap" >
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
|
然后将UserDao.java文件修改如下
1
2
3
4
5
6
|
public interface UserDao {
User findById(Long id);
void save(User user);
void update(User user);
void remove(Long id);
}
|
最后在SpringBoot的主程序上加上@MapperScan的注解将 dao 文件跟 sql 语句对应起来
1
2
3
4
5
6
7
|
@SpringBootApplication
@MapperScan ( "com.example.dao" )
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication. class , args);
}
}
|
总结
mybatis-spring-boot-starter可以快速的通过注解来开发,十分方便,可以灵活的使用 SQL 和调整 SQL,具体用注解还是基于 XML,我觉得还是看自己的喜好。
下面看下#{}和${}的区别
#{}在底层实现上使用?做占位符来生成PreparedStatement,然后将参数传入,大多数情况都应使用这个,它更快、更安全。
${}将传入的数据直接显示生成在sql中。如:order by ${user_id},如果传入的值是111,那么解析成sql时的值为order by 111, 如果传入的值是id,则解析成的sql为order by id.
以上所述是小编给大家介绍的MyBatis 使用指南,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://blog.makerwei.me/posts/33582/?utm_source=tuicool&utm_medium=referral