前言
mybatis是一个支持普通sql查询,存储过程和高级映射的优秀持久层框架。mybatis消除了几乎所有的jdbc代码和参数的手工设置以及对结果集的检索封装。mybatis可以使用简单的xml或注解用于配置和原始映射,将接口和java的pojo(plain old java objects,普通的java对象)映射成数据库中的记录。
本文将给大家详细介绍关于mybatis注解与xml常用语句的相关内容,下面话不多说了,来一起看看详细的介绍吧
mybatis注解使用
1.简单crud
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public interface usermapper {
//查询
@select ( "select * from user where id=#{id}" )
user selectuser( int id);
//查询全部
@select ( "select * from user" )
list<user> selectuserlist();
//增加数据
@insert ( "insert into user (name) values(#{name})" )
boolean insertuser(string name);
//修改用户
@update ( "update user set name=#{name} where id=#{id}" )
boolean updateuser( @param ( "name" ) string name, @param ( "id" ) int id);
//删除用户
@delete ( "delete from user where id=#{id}" )
boolean deleteuser( int id);
}
|
2.一对一注解
1
2
3
4
5
6
7
8
9
10
|
@select ( "select * from user" )
@results ({
@result (id = true ,property = "id" ,column = "id" ), //id=true 对应于主键
@result (property = "uid" ,column = "uid" ),
@result (property = "user" ,column = "uid" ,javatype = user. class ,
one = @one (select = "com.example.dao.userdao.finduserbyid" ,fetchtype = fetchtype. default ))
//user 对应实体类中一对一的实体类名字,uid表示通过uid外键查询user,javatype表示查询结果
//映射成user类型对象,one=表示一对xx fetchtype.default默认是立即加载全部查询,使用lazy懒加载需要才查询
})
list<user> selectuserlist();
|
3,一对多注解
mybatis的xml配置
1.配置resultmap
1
2
3
4
5
6
7
|
<resultmap id= "baseresultmap" type= "xx" >
<id column= "id" property= "id" jdbctype= "bigint" />
<result column= "aa" property= "aa" jdbctype= "varchar" />
<result column= "bb" property= "bb" jdbctype= "integer" />
<result column= "cc" property= "cc" jdbctype= "decimal" javatype= "java.math.bigdecimal" />
<result column= "dd" property= "dd" jdbctype= "date" />
</resultmap>
|
2.通用sql短语
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<sql id= "base_column_list" >
aa, bb
</sql>
<sql id= "where" >
<trim prefix= "where" prefixoverrides= "and|or" >
< if test= "id != null and id != ''" >
and t.id = #{id}
</ if >
< if test= "content != null and content != ''" >
and t.content like concat( '%' , #{content}, '%' )
</ if >
and t.app_code in
<foreach item= "item" index= "index" collection= "appcodes"
open= "(" separator= "," close= ")" >
#{item}
</foreach>
and t.user_id=u.id and t.removed= 0
</trim>
</sql>
|
3.需要验证的插入
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<insert id= "insert" parametertype= "xxx"
usegeneratedkeys= "true" keycolumn= "id" keyproperty= "id" >
insert into xxx (
<trim suffixoverrides= "," >
< if test= "title != null and title != '' " >
title ,
</ if >
</trim>
) values (
<trim suffixoverrides= "," >
< if test= "title != null and title != '' " >
#{title} ,
</ if >
</trim>
)
</insert>
|
4.需要验证的更新
1
2
3
4
5
6
7
8
9
10
|
<update id= "update" parametertype= "xxx" >
update xxx
<set>
< if test= "title != null and title != '' " >
title = #{title} ,
</ if >
</set>
where
id = #{id}
</update>
|
5.<!--批量更新ticketid和seatno-->
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<update id= "xxxupdate" parametertype= "java.util.list" >
update xxx
<trim prefix= "set" suffixoverrides= "," >
<trim prefix= "aa =case" suffix= "end," >
<foreach collection= "orders" item= "item" index= "index" >
< if test= "item.aa !=null" >
when id=#{item.id} then #{item.aa}
</ if >
</foreach>
</trim>
<trim prefix= "bb =case" suffix= "end," >
<foreach collection= "orders" item= "item" index= "index" >
< if test= "item.bb !=null" >
when id=#{item.id} then #{item.bb}
</ if >
</foreach>
</trim>
</trim>
where id in
<foreach collection= "orders" index= "index" item= "item" separator= "," open= "(" close= ")" >
#{item.id,jdbctype=bigint}
</foreach>
</update>
|
mybatis可以使用string给数据库int类型赋值
springboot中开启日志
1
|
#mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.stdoutimpl
|
1.order by ${columnname}
这里 mybatis 不会修改或转义字符串。note 用这种方式接受用户的输入,并将其用于语句中的参数是不安全的,会导致潜在的 sql 注入攻击,因此要么不允许用户输入这些字段,要么自行转义并检验。
2.如何使用连接池。
首先实例化连接池数据源对象,让他实现datasourcefactory这个接口。然后实现方法。在mybatis。conf文件中设置数据连接池这个类,将数据库连接信息放在config.properties文件中。
3.mybatis.config文件中setting和数据源的设置参数区别
会被覆盖。
4.连接参数查询顺序
首先查询properties文件,然后查询resource文件,最后查询方法参数。重复的话会被覆盖。
5.druid连接池配置方式:
详见官网
druiddatasourcefactory首先实行setproperties方法,然后返回设置数据源方法。drui数据源也需要在datasource中设置properties文件
6.实体类的方法不定义也可以进行映射
7.mybatis默认是事务不提交
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。
原文链接:https://segmentfault.com/a/1190000016333566