MyBatis学习笔记(四) 注解

简介: 使用MyBatis注解开发,可以省去类配置文件,简洁方便。但是比较复杂的SQL和动态SQL还是建议书写类配置文件。 注解还是不推荐使用的。只是了解了解!简单的CRUD可以使用注解。简单写写。
    使用MyBatis注解开发,可以省去类配置文件,简洁方便。但是比较复杂的SQL和动态SQL还是建议书写类配置文件。
注解还是不推荐使用的。只是了解了解! 简单的CRUD可以使用注解。简单写写。
    把之前的例子改成使用注解的。
 
UserMapper.java
 
  1 package com.cy.mybatis.mapper;
  2 
  3 import java.util.List;
  4 import java.util.Map;
  5 
  6 import org.apache.ibatis.annotations.Delete;
  7 import org.apache.ibatis.annotations.Insert;
  8 import org.apache.ibatis.annotations.Options;
  9 import org.apache.ibatis.annotations.Param;
 10 import org.apache.ibatis.annotations.Result;
 11 import org.apache.ibatis.annotations.ResultMap;
 12 import org.apache.ibatis.annotations.Results;
 13 import org.apache.ibatis.annotations.Select;
 14 import org.apache.ibatis.annotations.Update;
 15 
 16 import com.cy.mybatis.beans.UserBean;
 17 
 18 public interface UserMapper {
 19     // 简单的增删改查可以使用注解
 20     // 注解+配置文件
 21     
 22     /**
 23      * 新增用戶
 24      * @param user
 25      * @return
 26      * @throws Exception
 27      */
 28     @Insert("insert into t_user value (null,user.username,user.password,user.account)")
 29     @Options(useGeneratedKeys=true,keyProperty="user.id")
 30     public int insertUser(@Param("user")UserBean user) throws Exception;
 31     
 32     
 33     /**
 34      * 修改用戶
 35      * @param user
 36      * @param id
 37      * @return
 38      * @throws Exception
 39      */
 40     @Update(" update t_user set username=#{u.username},password=#{u.password},account=#{u.account} where id=#{id}")
 41     public int updateUser (@Param("u")UserBean user,@Param("id")int id) throws Exception;
 42     
 43      /**
 44       * 刪除用戶
 45       * @param id
 46       * @return
 47       * @throws Exception
 48       */
 49     @Delete(" delete from t_user where id=#{id}  ")
 50     public int deleteUser(int id) throws Exception;
 51     
 52     
 53     /**
 54      * 根据id查询用户信息
 55      * @param id
 56      * @return
 57      * @throws Exception
 58      */
 59     
 60     @Select(" select * from t_user where id=#{id}")
 61     @Results({
 62         
 63         @Result(id=true,property="id",column="id",javaType=Integer.class),
 64         @Result(property="username",column="username",javaType=String.class),
 65         @Result(property="password",column="password",javaType=String.class),
 66         @Result(property="account",column="account",javaType=Double.class)
 67     })
 68     public UserBean selectUserById(int id) throws Exception;
 69      /**
 70       * 查询所有的用户信息
 71       * @return
 72       * @throws Exception
 73       */
 74     
 75     @Select(" select * from t_user")
 76     @ResultMap("userMap")
 77     public List<UserBean> selectAllUser() throws Exception;
 78     
 79     
 80     /**
 81      * 批量增加
 82      * @param user
 83      * @return
 84      * @throws Exception
 85      */
 86    public int batchInsertUser(@Param("users")List<UserBean> user) throws Exception;
 87    
 88    /**
 89     * 批量删除
 90     * @param list
 91     * @return
 92     * @throws Exception
 93     */
 94    public int batchDeleteUser(@Param("list")List<Integer> list) throws Exception;
 95    
 96    
 97    /**
 98     * 分页查询数据
 99     * @param parma
100     * @return
101     * @throws Exception
102     */
103    public List<UserBean> pagerUser(Map<String, Object> parmas) throws Exception;
104    
105    /**
106     * 
107     * 分页统计数据
108     * @param parma
109     * @return
110     * @throws Exception
111     */
112     public int countUser(Map<String, Object> parmas) throws Exception;  
113     
114 }

 UserMapper.xml

 

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 3 <mapper namespace="com.cy.mybatis.mapper.UserMapper">
 4 <!-- 自定义返回结果集 -->
 5    <resultMap id="userMap" type="UserBean">
 6         <id property="id" column="id" javaType="java.lang.Integer"></id>
 7         <result property="username" column="username" javaType="java.lang.String"></result>
 8         <result property="password" column="password" javaType="java.lang.String"></result>
 9         <result property="account" column="account" javaType="java.lang.Double"></result>
10     </resultMap>
11     
12     <!-- 批量操作和foreach标签 -->
13     
14     <insert id="batchInsertUser" parameterType="java.util.List">
15        insert into t_user values 
16         <foreach collection="users" item="users" separator=",">
17          (null,#{users.username},#{users.password},#{users.account})
18         </foreach>
19     </insert>
20     
21     
22     <delete id="batchDeleteUser">
23        delete from t_user where id in (
24          <foreach collection="list" item="list" separator=",">
25           #{id}
26          </foreach>
27        )
28     </delete>
29     
30     <!--collection 为用于遍历的元素(必选),支持数组、List、Set  -->
31     <!-- item 表示集合中每一个元素进行迭代时的别名. -->
32     <!--separator表示在每次进行迭代之间以什么符号作为分隔 符.  -->
33     
34     <!--#在生成SQL时,对于字符类型参数,会拼装引号
35          $在生成SQL时,不会拼装引号,可用于order by之类的参数拼装
36       -->
37     <select id="pagerUser" parameterType="java.util.Map" resultMap="userMap">
38       select * from t_user where 1=1
39       <if test="username!=null">
40        and username like '%${username}%'
41       </if>
42        limit ${index},${pageSize} 
43     </select>
44     
45     <select id="countUser" parameterType="java.util.Map" resultType="int">
46         select count(*) from t_user where 1=1 
47         <if test="username != null">
48             and username like '%${username}%'    
49         </if>
50     </select>    
51     
52 </mapper>    

 

 简单的一个一对一的使用注解的。
 1 package com.lovo.mybatis.mapper;
 2 
 3 import org.apache.ibatis.annotations.Insert;
 4 import org.apache.ibatis.annotations.One;
 5 import org.apache.ibatis.annotations.Options;
 6 import org.apache.ibatis.annotations.Param;
 7 import org.apache.ibatis.annotations.Result;
 8 import org.apache.ibatis.annotations.ResultType;
 9 import org.apache.ibatis.annotations.Results;
10 import org.apache.ibatis.annotations.Select;
11 
12 import com.lovo.mybatis.beans.HusbandBean;
13 import com.lovo.mybatis.beans.WifeBean;
14 
15 public interface HusbandMapper {
16     
17     /**
18      * 保存丈夫
19      * @param husband
20      * @return
21      */
22     @Insert("insert into t_husband values (null,#{h.name})")
23     @Options(useGeneratedKeys=true,keyProperty="h.id")
24     public int saveHusband(@Param("h")HusbandBean husband);
25     
26     
27     /**
28      * 根据ID查询丈夫资料
29      * @param id
30      * @return
31      */
32     @Select("select * from t_husband where id=#{id}")
33     @ResultType(HusbandBean.class)
34     public HusbandBean findHusbandById(int id);
35     
36     
37     
38     /**
39      * 根据ID查询丈夫与妻子资料
40      * @param id
41      * @return
42      */
43     @Select("select * from t_husband where id=#{id}")
44     @Results({
45         @Result(id=true,property="id",column="id",javaType=Integer.class),
46         @Result(property="name",column="name",javaType=String.class),
47         @Result(property="wife",column="id",javaType=WifeBean.class,one=@One(select="com.lovo.mybatis.mapper.WifeMapper.findWifeByHusbandId"))
48     })
49     public HusbandBean findHusbandAndWife(int id);
50     
51     
52 }

 

 1 package com.cy.mybatis.mapper;
 2 
 3 import org.apache.ibatis.annotations.ResultType;
 4 import org.apache.ibatis.annotations.Select;
 5 
 6 import com.cy.mybatis.beans.WifeBean;
 7 
 8 public interface WifeMapper {
 9     
10     
11     @Select("select * from t_wife where fk_husband_id = #{id}")
12     @ResultType(WifeBean.class)
13     public WifeBean selectWifeByHusbandId(int id)throws Exception;
14 
15 }

 注意:使用resultType时,一定要保证,你属性名与字段名相同;如果不相同,就使用resultMap 。

 
相关文章
|
2月前
|
SQL XML Java
Mybatis基础使用知识(注解)
mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。 最后 mybatis 框架执行sql 并将结果映射为java对象并返回。采用ORM(对象关系映射)思想解决了实体和数据库映射问题,对jdbc进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与jdbc api 打交道,就可以完成对数据库的持久化操作。
381 0
|
5月前
|
SQL XML Java
MyBatis注解的运用于条件搜索实践
通过上述的实践,我们可以看出MyBatis注解不仅能够实现条件搜索的需求,还能够提供灵活而强大的SQL构造能力,极大地简化了代码的复杂度,提高了开发效率。在实际的项目开发中,结合实际的业务需求合理选择MyBatis的配置方式(注解或XML),能够让数据持久层代码变得更加清晰和易维护。
134 11
|
7月前
|
存储 Java 数据库连接
Mybatisplus中的主要使用注解
3.有些注解需要配合其他配置使用。例如,@Version需要配合乐观锁插件使用,@EnumValue需要配合对应的TypeHandler使用。
337 11
|
8月前
|
SQL XML Java
MyBatis——选择混合模式还是全注解模式?
在MyBatis开发中,Mapper接口的实现方式有两种:全注解模式和混合模式。全注解模式直接将SQL嵌入代码,适合小规模、简单逻辑项目,优点是直观简洁,但复杂查询时代码臃肿、扩展性差。混合模式采用接口+XML配置分离的方式,适合大规模、复杂查询场景,具备更高灵活性与可维护性,但学习成本较高且调试不便。根据项目需求与团队协作情况选择合适模式至关重要。
176 4
|
9月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
736 0
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
1891 5
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
SQL 缓存 Java
MyBatis如何关闭一级缓存(分注解和xml两种方式)
MyBatis如何关闭一级缓存(分注解和xml两种方式)
500 5
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
Java 数据库连接 mybatis
Mybatis使用注解方式实现批量更新、批量新增
Mybatis使用注解方式实现批量更新、批量新增
310 3
|
SQL 存储 数据库
深入理解@TableField注解的使用-MybatisPlus教程
`@TableField`注解在MyBatis-Plus中是一个非常灵活和强大的工具,能够帮助开发者精细控制实体类与数据库表字段之间的映射关系。通过合理使用 `@TableField`注解,可以实现字段名称映射、自动填充、条件查询以及自定义类型处理等高级功能。这些功能在实际开发中,可以显著提高代码的可读性和维护性。如果需要进一步优化和管理你的MyBatis-Plus应用程
999 3