Mybatis老手复习文档 (2)

这样则大多数不需要配置映射,只需要开在mybatis-config.xml中的setting中开启一个值即可

<settings> <!--开启自动的大小写转换--> <!--官网的解释:开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。--> <setting value="true"/> </settings>

希望你是使用的规范命名,不然你的代码会显得很low

如何配置映射 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.pipihao.mapper.TeacherMapper"> <select resultMap="testName"> select * from blog where id = #{id} </select> <!--这个id就是一个别名,用来 使用这个映射的名字而已,id的名字可以自定义,且resultMap 则可以通过这个id来使用这个映射 type是指定一个映射的严刑,目前是使用的是在mapper中配置扫描的pojo类的别名 如果为id可以使用<id>标签 property是对应类的属性名,column是对应数据库表的字段名 private String id; private String title; private String author; private Date createTime; private int view; --> <resultMap type="blogs"> <id property="id" column="id"/> <result property="author" column="author"/> <result property="title" column="title"/> <!--mysql建议使用规范命名--> <result property="createTime" column="create_time"/> <result property="view" column="view"/> </resultMap> </mapper> 6、日志

主要是log4j 还有 配置

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <!-- 这里配置的是LOG4J的名字,且setting的name不能出错,不然,很难查错 字段内更不能出现这个空格 --> <setting value="LOG4J"/> </settings> </configuration> 7、分页

mybatis提供了一个rowBunds分页,不过仔细看了之后,发现还不如使用mysql的分页,缺点是增加了代码量,然后该做还是要做,并没有省什么操作(这里我建议,要么使用PageHelper,要么自己做原生的分页查询)

原生分页

<select > select * from blog where id = #{tid} limit #{page},#{rows} </select>

RowBunds

<select > select * from blog </select> RowBounds rowBounds = new RowBounds(0,2); List<Role> rolesByrowBounds = mapper.getRolesByrowBounds(rowBounds); System.out.println(rolesByrowBounds.size()); 8、使用注解开发

主要是注解开发也可以达到跟xml配置一样的 效果,所以在以后 的开发之中,大多数使用的是注解开发,但不过,xml,永不过时

@Select @Insert @Update @Delete

public interface StudentMapper { @Select("select * from student where id = #{sid}") Students getStudentById(@Param("sid")int sid); }

这个再提一下@Results 注解,这个是可以在注解实现和resultMap一样功能的注解,也可以设置id,可以复用

下面这个 是复制网上,大概知道这个有这个东西就可以了

@Results(id="groupWithUsers", value = { @Result(property = "groupId", column = "group_id", id = true), @Result(property = "name", column = "name"), @Result(property = "accountId", column = "account_id"), @Result(property = "deleteFlag", column = "delete_Flag"), @Result(property = "parentId", column = "parent_Id"), @Result(property = "userList", javaType=List.class, many =@Many(select="selectUsersByGroupId"), column = "group_id")}) //查询 @Select({"select * from group where account_id=#{accountId} and delete_flag=0"}) List<Group> selectGroupWithUsers(@Param("accountId") String accountId); 9、多对一处理 <mapper namespace="com.pipihao.mapper.StudentMapper"> <select resultType="students"> select * from student where tid = #{sid} </select> <resultMap type="students"> <result property="id" column="id"/> <result property="name" column="name"/> <association property="teacher" column="tid" javaType="teacher" select="com.pipihao.mapper.TeacherMapper.getTeacherById"> </association> </resultMap> </mapper> 10、一对多处理

主要还是看怎么用

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.pipihao.mapper.TeacherMapper"> <select resultMap="teacherStudent"> select * from teacher where id = #{tid} </select> <resultMap type="teacher"> <result column="id" property="id"/> <result column="name" property="name"/> <collection property="studentsList" javaType="ArrayList" column="id" ofType="students" select="com.pipihao.mapper.StudentMapper.getStudentById"> </collection> </resultMap> <select resultMap="teacherP"> SELECT s.id sid,s.name sname,s.tid tid,t.name tname FROM teacher t,student s WHERE s.tid = t.id AND t.id = #{tid} </select> <resultMap type="teacher"> <id property="id" column="tid"/> <result property="name" column="tname"/> <collection property="studentsList" ofType="students"> <result property="id" column="sid"/> <result property="name" column="sname"/> <result property="tid" column="tid"/> </collection> </resultMap> </mapper> 小结:

关联-association [多对一]

集合-collection [一对多]

javaType & ofType

javaType 用来指定实体类中属性的类型

ofType用来指定映射到List或者集合中的pojo类型,泛型中的约束类型!

注意点:

保证 Sql的可读性,尽量保证通俗易懂

注意一对多和我对一中,属性我和字段的问题

如果问题不好排查错误,可以使用日志 ,建议使用Log4j

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspdsy.html