对应Mapper中的方法
int insert(User user);
另外的update和delete类似,这里就没有必要逐一演示了 。
注解方式九个顶级映射元素对应注解:
文章插图
其他部分注解是配合九个注解进行使用的 。
select注解把本地的UserMapper.xml删掉,然后改一下mybatis-config.xml,把其中的UserMapper.xml给注释掉 。添加
<mapper class="com.tian.mybatis.mapper.UserMapper"/>
UserMapper.java添加注解public interface UserMapper {@Select("select * from m_user where id = #{id}")User selectUserById(Integer id);}
再次测试User user = sqlSession.selectOne("com.tian.mybatis.mapper.UserMapper.selectUserById", 1);System.out.println(user);
输出:User{id=1, userName='null', age=22}
从输出内容看到,userName为null,这也是因为和数据库表格中的字段name不一致导致的,那么如何处理呢?
这么搞,再添加一个注解:
public interface UserMapper {@Select("select * from m_user where id = #{id}")@Results( @Result(column = "name",property = "userName"))User selectUserById(Integer id);}
输出:User{id=1, userName='tian', age=22}
这样也就是在使用注解的时候,处理实体属性名和数据库表字段名不一样的问题的办法 。
insert、update、delete同样也可以使用注解来搞定了 。
@Insert、@Update、@Delete配上相应的SQL语句 。
注解和xml是否可以共存?
<update id="updateAuthorIfNecessary">update m_user<trim prefix="SET" suffixOverrides=","><if test="userName != null and userName != ''">`name` = #{userName},</if><if test="gender != null and gender != 0">gender = #{gender},</if><if test="age != null and age != 0">age = #{age},</if></trim>where id=#{id}</update>
同时在UserMapper.java中的方法上添加注解@Update("update m_user set`name` = #{userName},gender = #{gender},age = #{age} where id=#{id}")int updateAuthorIfNecessary(User user);
再次中子星的时候回报异常的:nested exception is java.lang.IllegalArgumentException:Mapped Statements collection already contains value for com.tian.mybatis.mapper.UserMapper.updateAuthorIfNecessary. please check file [D:workspacemy_codemybatistargetclassesmapperUserMapper.xml] and com/tian/mybatis/mapper/UserMapper.java (best guess)
大致意思就是说,已经存在了,即就是不能同时使用xml和注解 。二者选其一 。xml可以和注解结合使用,但是得保证同一个方法不能同时存在xml和注解 。
建议
简单的sql处理可以使用注解,复杂的sql使用xml 。但是实际工作还得看你待的项目中有没有对这个进行规范化 。
在项目中无非就三种:
1.全部必须使用xml方式 。
2.全部必须使用注解方式 。
3.可以同时使用xml和注解 。
高级映射association映射到JavaBean的某个复杂的”数据类型”属性,仅处理一对一的关联关系 。
<resultMap type="com.tian.mybatis.entity.User" id="userMapRole"><id column="id" property="id" /><result column="name" property="userName" /><result column="age" property="age" /><association property="role" javaType="UserRole"><id column="id" property="id" /><result column="roleName" property="roleName" /></association></resultMap>
association的属性节点:- property:映射数据库列的实体对象属性名 。
- javaType:完整的java类名和限定名 。propert所映射的属性的类型 。
- id:一般为映射主键,可以提高性能 。
- result:
- column:映射的数据库的字段名 。
- property:映射的数据列对应的实体对象属性 。
<resultMap type="com.tian.mybatis.entity.User" id="userMapAddress"><id column="id" property="id"/><result column="name" property="userName"/><collection property="lists" ofType="UserAddress"><id column = "id" property = "id"><result column="addressDesc" property="addressDesc"/></collection></resultMap>
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 谁在比赛中扣断过篮板?
- 高级语言中的语句在汇编中是如何实现的
- WSL2 中使用 systemctl 命令
- Mybatis如何连接多个数据源
- 白茶饼中间黑色,安吉白茶绿茶中的白茶
- 史书上不会公开的历史真相 中国古代历史未解之谜
- 绿茶的种种分类方式,中国茶是什么分类的
- 牙齿中间有黑色的东西洗不掉怎么办 牙齿里面有黑色的东西怎么洗干净
- 蒸红枣馒头的做法大全
- 有颜色的馒头怎么做