1mybatis使用步骤:
1创建和数据库表对应的实体类
2创建dao持久层.
3配置主配置文件SqlMapConfig.xml
4配置映射配置文件或选择注释的方式
5创建测试类{
1配置工具–配合单元测试初始化和摧毁
2实现方法
}
2原理:当在测试类中,
1通过ResourcesAsTream读取主配置文件.通过此文件查找映射文件或者没有映射文件,就直接查看daO持久层的接口.
2MyBatis基于XML配置文件生成Configuration,和一个个MappedStatement(包括了参数映射配置、动态SQL语句、结果映射配置),其对应着<select | update | delete | insert>标签项。
3利用sqlSessionFactory生成sqlSession对象,完成和数据库的数据查询交互
4调用api,根据指定的paramType(表的实体类)和id(方法名)等将数据进行封装.
5主要原理就是映射.
配置法:
1基本格式:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace=" accountDao" >
<resultMap id="AccountMap" type="domain.account">
<id column="bid" property="id"></id>
<result property="uid" column="uid" ></result>
<result column="money" property="money"></result>
<association property="user" javaType="domain.User" column="uid" select="dao.IUserDao.findOne">
</association>
</resultMap>
<resultMap id="AccountMap1" type="domain.account">
<id column="bid" property="id"></id>
<result property="uid" column="uid" ></result>
<result column="money" property="money"></result>
</resultMap>
<select id="findALL" resultType="domain.account" resultMap="AccountMap" >
select * from account
</select>
<select id="findById" resultMap="AccountMap1" resultType="domain.account" parameterType="int">
select * from account where uid=#{uid}
</select>
</mapper>
1案列:
1一对一查询:
<resultMap id="AccountMap" type="domain.account">
<id column="bid" property="id"></id>
<result property="uid" column="uid" ></result>
<result column="money" property="money"></result>
<association property="user" javaType="domain.User" column="uid" select="dao.IUserDao.findOne">
</association>
</resultMap>
2一对多查询:
<resultMap id="UserMap" type="domain.User">
<id property="id" column="id"></id>
<result property="username" column="username"></result>
<result property="address" column="address"></result>
<collection property="accounts" ofType="domain.account" select="dao.IAccountDao.findById" column="id">
</collection>
</resultMap>
3多对多:
<resultMap id="roleMap" type="domain.role">
<id column="rid" property="roleId"></id>
<result column="ROLE_NAME" property="roleName"></result>
<result column="ROLE_DESC" property="roleDesc"></result>
<collection property="users" ofType="domain.User">
<id property="id" column="id"></id>
<result property="username" column="username"></result>
<result property="address" column="address"></result>
</collection>
</resultMap>
<select id="findAll" resultMap="roleMap" resultType="domain.role">
select u.*,r.id as rid,r.role_name,r.role_desc from
role r left outer join user_role ur on ur.rid=r.id
left outer join user u on u.id=ur.uid;
</select>
上述案列注解的方法:
@Select("select * from user")
@Results(id = "UserMap1",value = {
@Result(id = true,column = "id",property = "id"),
@Result(column = "username",property = "username"),
@Result(column ="address",property = "address"),
@Result(property = "accounts",column = "id",many =@Many(fetchType = FetchType.LAZY,
select = "dao.IAccountDao.findById"))
})
List<User> findAll1();
引用:@ResultMap("roleMap")
role findOne(int id);