SpringBoot集成Mybatis(四)
Mybatis是一款支持复杂的SQL语句,存储过程及高级映射的持久层的框架。使用Mybatis有两种方式,XML和注解。
一、Mybatis注解版
Mybatis初期使用比较麻烦,需要很多配置文件、实体类、dao层映射、还有很多其他的配置。初期开发使用generator可以根据表结构自动生产实体类、dao层代码,这样是可以减轻一部分开发量;后期mybatis进行大量的优化,现在可以使用注解版本,自动管理dao层和配置文件。
mybatis-spring-boot-starte就是SpringBoot集成Mybatis的jar包,可以完全使用注解,无需配置文件,简单配置轻松上手。
1、添加pom.xml文件
<!--mybatis jar-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!--数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
2、配置application.properties
#指定服务端口
server.port=8089
## 数据源配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
springboot会自动加载spring.datasource.*相关配置,数据源就会自动注入到sqlSessionFactory中,sqlSessionFactory会自动注入到Mapper中。
在启动类中添加对mapper包扫描@MapperScan或者在每个Mapper类中增加上面添加注解@Mapper,推荐在启动类加注解,这样不用在每个Mapper类加注解。
@SpringBootApplication
@MapperScan("com.example.mybatis.dao")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
3、Mapper
public interface UserMapper {
/**
* @Description: 查询用户列表
*/
@Select("SELECT * FROM user")
@Results({
@Result(property = "userName", column = "user_name"),
@Result(property = "passWord", column = "pass_word"),
@Result(property = "nickName", column = "nick_name"),
@Result(property = "regTime", column = "reg_time")
})
List<User> getAll();
/**
* @Description: 保存用户信息
*/
@Insert("INSERT INTO user(user_name,pass_word,email,nick_name,reg_time) VALUES(#{userName}, #{passWord}, #{email},#{nickName},#{regTime})")
void insert(User user);
/**
* @Description: 修改用户信息
*/
@Update("UPDATE user SET user_name=#{userName},nick_name=#{nickName} WHERE id =#{id}")
void update(User user);
/**
* @Description: 删除用户信息
*/
@Delete("DELETE FROM user WHERE id =#{id}")
void delete(Long id);
}
@Select是查询类的注解,所有的查询均使用这个
@Result 修饰返回的结果集,关联实体类属性和数据库字段一一对应,如果实体类属性和数据库属性名保持一致,就不需要这个属性来修饰。
@Insert 插入数据库使用,直接传入实体类会自动解析属性到对应的值
@Update 负责修改,也可以直接传入对象
@delete 负责删除
4、测试
启动项目成功后输入查询全部用户的接口。
5、常见问题
二、Mybatis XML版本
xml版本保持映射文件的老传统,优化主要体现在不需要实现dao的是实现层,而是在映射的xml文件中找到相应的sql语句。
1、application.properties文件中增加配置
## Mybatis 配置
##注意:对应实体类的路径
mybatis.typeAliasesPackage=com.example.mybatis.bean.User
##注意:一定要对应mapper映射xml文件的所在路径
mybatis.mapperLocations=classpath:mapper/*.xml
2、Mapper接口和Mapper XML的映射关系
3、Dao层
public interface UserMapper {
/**
* 通过用户id查询User
**/
User selectUserByUserId(Long id);
/**
* 保存用户信息
**/
int createUser(User record);
/**
* 删除用户信息
**/
int deleteByUserId(Long id);
/**
* 修改用户信息
**/
int modifyUserByUserId(User record);
}
Dao层现在十分简洁,具体的sql语句都在mapper.xml文件中,具体代码我这里就不贴了。
4、使用
新增功能,在url页面的测试。
三、注解和xml如何选择呢?
注解版适合简单快速的模式。
xml版比较适合大型项目,可以灵活的动态生成SQL,方便调整SQL
四、GitHub地址
注解版:
https://github.com/xiaonongOne/springboot-mybatis-annotation
XML版:
https://github.com/xiaonongOne/springboot-mybatis-xml