服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - mybatis注解与xml常用语句汇总

mybatis注解与xml常用语句汇总

2021-05-31 11:05wotrd Java教程

最近一直在用mybatis,由于需要使用到了动态sql,遇到了一些问题,现在来总结一下,经验教训。下面这篇文章主要给大家总结介绍了mybatis注解与xml常用语句的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

前言

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

延伸 · 阅读

精彩推荐