快速普及
1、mybatis是什么
mybatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。
MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
Mybatis实现了接口绑定,使用更加方便。
对象关系映射的改进,效率更高
MyBatis采用功能强大的基于OGNL的表达式来消除其他元素。
2、功能架构
3、执行流程
原理详解:
MyBatis应用程序根据XML配置文件创建SqlSessionFactory,SqlSessionFactory在根据配置,配置来源于两个地方,一处是配置文件,一处是Java代码的注解,获取一个SqlSession。SqlSession包含了执行sql所需要的所有方法,可以通过SqlSession实例直接运行映射的sql语句,完成对数据的增删改查和事务提交等,用完之后关闭SqlSession。
下面看下本文介绍重点mybatis 简单注解
关键注解词 :
@Insert : 插入sql , 和xml insert sql语法完全一样
@Select : 查询sql, 和xml select sql语法完全一样
@Update : 更新sql, 和xml update sql语法完全一样
@Delete : 删除sql, 和xml delete sql语法完全一样
@Param : 入参
@Results : 结果集合
@Result : 结果
1、领域模型 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
public class UserDO { private Long id; private String userName; private Date gmtCreate; private Date gmtModified; public Long getId() { return id; } public void setId(Long id) { this .id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this .userName = userName; } public Date getGmtCreate() { return gmtCreate; } public void setGmtCreate(Date gmtCreate) { this .gmtCreate = gmtCreate; } public Date getGmtModified() { return gmtModified; } public void setGmtModified(Date gmtModified) { this .gmtModified = gmtModified; } } |
2、接口定义 :
1
2
3
4
5
6
7
8
9
10
|
public interface UserDAO { @Insert ( "INSERT INTO t_user(gmt_create, gmt_modified, user_name) values(now(), now(), #{userName})" ) public int insert( @Param ( "userName" ) String userName); @Select ( "SELECT * FROM t_user WHERE id = #{id}" ) public UserDO selectByUserId( @Param ( "id" ) Long id) ; @Update ( "UPDATE t_user SET gmt_modified = now(), user_name = #{userName} WHERE id = #{id}" ) public int udpateById( @Param ( "userName" ) String userName, @Param ( "id" ) Long id) ; @Delete ( "DELETE FROM t_user WHERE id = #{id}" ) public int udpateById( @Param ( "id" ) Long id) ; } |
3、mybatis xml config:
1
2
3
4
5
6
7
8
|
<!-- mybatis 注解 --> <bean id= "sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean" > <property name= "dataSource" ref= "mysqlBASE" /> <!--这里只需要配置你自己的数据源即可--> </bean> <bean id= "userDAO" class = "org.mybatis.spring.mapper.MapperFactoryBean" > <property name= "mapperInterface" value= "com.yuanmeng.userDAO" /> <!--mybatis接口--> <property name= "sqlSessionFactory" ref= "sqlSessionFactory" /> <!--sqlSession工厂--> </bean> |
这样,我们就完成了mybatis 使用注解的demo, 是不是觉得很简单 ~~
如果熟悉mybatis xml的话, 大多数情况下, 我们需要将数据库表的字段名 与 class DO 映射起来。mybatis注解也提供了映射的功能, 语法大同小异。
1
2
3
|
@Select ( "SELECT * FROM tsp_template WHERE id = #{id}" ) @Results (value = { @Result (property = "userName" , column = "user_name" , javaType = String. class , jdbcType = JdbcType.VARCHAR) }) public UserDO selectById( @Param ( "id" ) Long id); |
当然, 上述只是再不能简单的sql了。想想如果我们有这种需求, 更新用户信息, 希望能更新指定的属性值, 换而言之, 像xml 一样动态生成SQL 。 那我们就不能简单粗暴使用 @update 注解 。好在 强大的mybatis 也提供了动态SQL的组装。
动态SQL
对应关系如下
@Insert :@InsertProvider
@Select :@SelectProvider
@Update :@UpdateProvider
@Delete :@DeleteProvider
四个provider注解标识 使用了动态SQL, 使用语法格式 :
1
|
@UpdateProvider (type = UserProvider. class , method = "updateSQL" ) |
如何构造动态SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public class UserProvider { /** * udpate * @param UserDO userDO * @return */ public String updateSQL( final UserDO userDO) { return new SQL() { { UPDATE( "t_user" ); SET( "gmt_modified = now()" ); if (userDO.getUserName() != null ) { SET( "user_name = #{userName}" ); } WHERE( "id = #{id}}" ); } }.toString(); } } |
本文提到的知识点比较基础, 如需深入了解见官网文档or看下源码。
总结 :
1、xml 和 注解 如何选择 ? 因人而异, 每个人的撸码各有各的习惯, xml 、注解各有优缺点, xml的缺点 : 当模型属性有变更时, 需要从DO改到DAO改到xml, 想想就蛋疼了~ xml也有优点 , SQL片段复用方便, 语法平易近人, 不像注解, 构造个动态语句, 还得建个类, 而且当一段SQL被多处引用时, 代码就显得冗余了, 这时必须借助 xml来抽取共同使用。吐槽了下mybatis注解, 那注解岂不是毫无用处。 no , mybatis 适合模型属性经常变更的场景, 因为可以结合反射, 正则匹配动态构造SQL(纯粹瞎歪歪, 个人想法, 应该可以实现, 改天撸一发)。可以说, mybatis的注解 优点 很好弥补了 xml缺点。两者互补~
以上所述是小编给大家介绍的Mybatis 开发注解快速入门,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://www.cnblogs.com/chenmo-xpw/p/6099951.html