MyBatis
简介:MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO为数据库中的记录。
开发步骤
- 添加MyBatis坐标
- 创建user数据表
- 编写User实体类
- 编写映射文件UserMapper.xml
- 编写核心文件SqlMapConfig.xml
- 编写测试类
<?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="userMapper">
<select id="findAll" resultType="com.ego.domain.User">
select * from student
</select>
</mapper>
<?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>
<!--加载外部资源文件-->
<properties resource="jdbc.properties"></properties>
<!--数据源环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--加载映射文件-->
<mappers>
<mapper resource="com.ego.mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url=jdbc:sqlserver://localhost:1433;databaseName=test
jdbc.username=sa
jdbc.password=root
package com.ego;
import com.ego.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* @author 袁梦达 2019012364
*/
public class MybatisTest {
@Test
public void test1() throws IOException {
//获得核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行操操作 参数:namespace + id
List<User> list = sqlSession.selectList("userMapper.findAll");
//打印数据
for (User user : list) {
System.out.println(user.toString());
}
//释放资源
sqlSession.close();
}
}
增删改查操作
package com.ego;
import com.ego.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* @author 袁梦达 2019012364
*/
public class MybatisTest {
@Test
public void test1() throws IOException {
//获得核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行操操作 参数:namespace + id
List<User> list = sqlSession.selectList("userMapper.findAll");
//打印数据
for (User user : list) {
System.out.println(user);
}
//释放资源
sqlSession.close();
}
@Test
public void test2() throws IOException {
//获得核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行操操作 参数:namespace + id
User user = new User(4, "ego", 21);
sqlSession.insert("userMapper.save", user);
//提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
}
@Test
public void test3() throws IOException {
//获得核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行操操作 参数:namespace + id
User user = new User(1, "ego123", 100);
sqlSession.update("userMapper.update", user);
//提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
}
@Test
public void test4() throws IOException {
//获得核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行操操作 参数:namespace + id
User user = new User();
user.setId(4);
sqlSession.update("userMapper.delete", user);
//提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
}
}
<?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="userMapper">
<!--删除操作-->
<delete id="delete" parameterType="java.lang.Integer">
delete from student where id = #{id}
</delete>
<!--修改操作-->
<update id="update" parameterType="com.ego.domain.User">
update student set name = #{name}, age = #{age} where id = #{id}
</update>
<!--插入操作-->
<insert id="save" parameterType="com.ego.domain.User">
insert into student values (#{id}, #{name}, #{age})
</insert>
<!--查询操作-->
<select id="findAll" resultType="com.ego.domain.User">
select * from student
</select>
</mapper>
typeAliases标签:设置类型别名
<typeAliases>
<typeAlias type="com.ego.domain.User" alias="user"></typeAlias>
</typeAliases>
注意要放在properties下面
Dao层实现
传统方式
package com.ego.dao;
import com.ego.domain.User;
import java.io.IOException;
import java.util.List;
/**
* @author 袁梦达 2019012364
*/
public interface UserMapper {
public List<User> findAll() throws IOException;
}
package com.ego.dao.impl;
import com.ego.dao.UserMapper;
import com.ego.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* @author 袁梦达 2019012364
*/
public class UserMapperImpl implements UserMapper {
public List<User> findAll() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> list = sqlSession.selectList("userMapper.findAll");
return list;
}
}
package com.ego.service;
import com.ego.dao.impl.UserMapperImpl;
import com.ego.domain.User;
import java.io.IOException;
import java.util.List;
/**
* @author 袁梦达 2019012364
*/
public class ServiceDemo {
public static void main(String[] args) throws IOException {
UserMapperImpl userMapper = new UserMapperImpl();
List<User> users = userMapper.findAll();
System.out.println(users);
}
}
代理开发方式
采用Mybatis的代理开发方式实现DAO层的开发,这种方式是我们后面进入企业的主流。
Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。
Mapper接口开发需要遵循以下规范:
- Mapper.xml文件中的namespace与mapper接口的全限定名相同
- Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
- Mapper接口方法的输入参数类型和mapper.xmI中定义的每个sql的parameterType的类型相同
- Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
package com.ego.dao;
import com.ego.domain.User;
import java.io.IOException;
import java.util.List;
/**
* @author 袁梦达 2019012364
*/
public interface UserMapper {
public List<User> findAll();
public User findById(int id);
}
<?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="com.ego.dao.UserMapper">
<select id="findAll" resultType="com.ego.domain.User">
select * from student
</select>
<select id="findById" parameterType="int" resultType="com.ego.domain.User">
select * from student where id = #{id}
</select>
</mapper>
package com.ego.service;
import com.ego.dao.UserMapper;
import com.ego.dao.impl.UserMapperImpl;
import com.ego.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* @author 袁梦达 2019012364
*/
public class ServiceDemo {
public static void main(String[] args) throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.findAll();
System.out.println(users);
User user = mapper.findById(1);
System.out.println(user);
}
}
映射文件深入
动态sql
if
<?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="com.ego.mapper.UserMapper">
<select id="findByCondition" parameterType="com.ego.domain.User" resultType="com.ego.domain.User">
select * from student
<where>
<if test="id != 0">
and id = #{id}
</if>
<if test="name != null">
and name = #{name}
</if>
<if test="age != null">
and age = #{age}
</if>
</where>
</select>
</mapper>
foreach
<?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="com.ego.mapper.UserMapper">
<select id="findByCondition" parameterType="com.ego.domain.User" resultType="com.ego.domain.User">
select * from student
<where>
<if test="id != 0">
and id = #{id}
</if>
<if test="name != null">
and name = #{name}
</if>
<if test="age != null">
and age = #{age}
</if>
</where>
</select>
<select id="findByIds" parameterType="list" resultType="com.ego.domain.User">
select * from student
<where>
<foreach collection="list" open="age in(" close=")" item="age" separator=",">
#{age}
</foreach>
</where>
</select>
</mapper>
sql片段抽取
<?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="com.ego.mapper.UserMapper">
<sql id="selectStudent">select * from student</sql>
<select id="findByCondition" parameterType="com.ego.domain.User" resultType="com.ego.domain.User">
<include refid="selectStudent"></include>
<where>
<if test="id != 0">
and id = #{id}
</if>
<if test="name != null">
and name = #{name}
</if>
<if test="age != null">
and age = #{age}
</if>
</where>
</select>
<select id="findByIds" parameterType="list" resultType="com.ego.domain.User">
<include refid="selectStudent"></include>
<where>
<foreach collection="list" open="age in(" close=")" item="age" separator=",">
#{age}
</foreach>
</where>
</select>
</mapper>
核心配置文件深入
TypeHandler
当我们在javabean中自定义了枚举类型或者其它某个类型,但是在数据库中存储时往往需要转换成数据库对应的类型,并且在从数据库中取出来时也需要将数据库类型转换为javabean中的对应类型。比如:javabean中字段类型为Date,数据库中存储的是varchar类型;javabean中字段类型是Enum,数据库中存储的是String或者Integer。因为有大量类似数据的转换,手动转换类型进行存储和查询已经过于麻烦。MyBatis为我们提供了解决办法:TypeHandler类型处理器。
MyBatis 中的 TypeHandler 类型处理器用于 JavaType 与 JdbcType 之间的转换,用于 PreparedStatement 设置参数值和从 ResultSet 或 CallableStatement 中取出一个值。MyBatis 内置了大部分基本类型的类型处理器,所以对于基本类型可以直接处理,当我们需要处理其他类型的时候就需要自定义类型处理器。
#####开发步骤
- 定义转换类继承类BaseTypeHandler<T
- 覆盖4个未实现的方法,其中setNonNullParameter为java程序设置数据到数据库的回调方法,getNullableResult为查询时mysql的字符串类型转换成java的Type类型的方法
- 在MyBatis核心配置文件中进行注册
- 测试转换是否正确
package com.ego.handler;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
/**
* @author 袁梦达 2019012364
*/
public class DateTypeHandler extends BaseTypeHandler<Date> {
//将java数据转换到数据库类型
@Override
public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException {
long time = date.getTime();
preparedStatement.setLong(i, time);
}
//将数据库类型转换到java类型
@Override
public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {
long aLong = resultSet.getLong(s);
return new Date(aLong);
}
//将数据库类型转换到java类型
@Override
public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {
long aLong = resultSet.getLong(i);
return new Date(aLong);
}
//将数据库类型转换到java类型
@Override
public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
long aLong = callableStatement.getLong(i);
return new Date(aLong);
}
}
<?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>
<!--加载外部资源文件-->
<properties resource="jdbc.properties"></properties>
<!--注册类型处理器-->
<typeHandlers>
<typeHandler handler="com.ego.handler.DateTypeHandler"></typeHandler>
</typeHandlers>
<!--数据源环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--加载映射文件-->
<mappers>
<mapper resource="com.ego.mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
<?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="com.ego.mapper.UserMapper">
<insert id="save" parameterType="com.ego.domain.User">
insert into student values(#{id}, #{name}, #{age}, #{birthday})
</insert>
<select id="findById" parameterType="int" resultType="com.ego.domain.User">
select * from student where id = #{id}
</select>
</mapper>
package com.ego.domain;
import java.util.Date;
/**
* @author 袁梦达 2019012364
*/
public class User {
private int id;
private String name;
private int age;
private Date birthday;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public User(int id, String name, int age, Date birthday) {
this.id = id;
this.name = name;
this.age = age;
this.birthday = birthday;
}
public User() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
package com.ego.mapper;
import com.ego.domain.User;
import java.util.List;
/**
* @author 袁梦达 2019012364
*/
public interface UserMapper {
public List<User> findByCondition(User user);
public List<User> findByIds(List<Integer> list);
public void save(User user);
public User findById(int id);
}
package com.ego;
import com.ego.domain.User;
import com.ego.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
/**
* @author 袁梦达 2019012364
*/
public class MapperTest {
@Test
public void test1() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactoryBuilder.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setId(5);
user.setName("sbzj");
user.setAge(22);
user.setBirthday(new Date());
mapper.save(user);
sqlSession.commit();
sqlSession.close();
}
@Test
public void test2() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactoryBuilder.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.findById(4);
System.out.println(user.getBirthday());
}
}
####plugins标签
MyBatis可以使用第三方的插件来对功能进行扩展,如:分页助手PageHelper是将分页的复杂操作进行封装,使用简单的方式可获得分页的相关数据
开发步骤
- 导入通用PageHelper坐标
- 在mybatis核心配置文件中配置PageHelper插件
- 测试分页数据获取
多表查询
一对一
第一种写法
<?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="com.ego.mapper.OrderMapper">
<resultMap id="orderMap" type="com.ego.domain.Order">
<!--手动指定字段与实体属性的映射关系-->
<id column="oid" property="id"></id>
<result column="ordertime" property="ordertime"></result>
<result column="total" property="total"></result>
<result column="uid" property="user.id"></result>
<result column="name" property="user.name"></result>
<result column="age" property="user.age"></result>
</resultMap>
<select id="findAll" resultMap="orderMap">
select *, o.id oid
from orders o, student s
where o.uid = s.id;
</select>
</mapper>
第二种写法
<?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="com.ego.mapper.OrderMapper">
<resultMap id="orderMap" type="com.ego.domain.Order">
<!--手动指定字段与实体属性的映射关系-->
<id column="oid" property="id"></id>
<result column="ordertime" property="ordertime"></result>
<result column="total" property="total"></result>
<!-- <result column="uid" property="user.id"></result>-->
<!-- <result column="name" property="user.name"></result>-->
<!-- <result column="age" property="user.age"></result>-->
<!--property:Order中的user(private User user), javaType是类名-->
<association property="user" javaType="com.ego.domain.User">
<id column="uid" property="id"></id>
<result column="name" property="name"></result>
<result column="age" property="age"></result>
</association>
</resultMap>
<select id="findAll" resultMap="orderMap">
select *, o.id oid
from orders o, student s
where o.uid = s.id;
</select>
</mapper>
一对多
<?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="com.ego.mapper.UserMapper">
<resultMap id="userMap" type="com.ego.domain.User">
<id column="uid" property="id"></id>
<result column="name" property="name"></result>
<result column="age" property="age"></result>
<collection property="orderList" ofType="com.ego.domain.Order">
<id column="oid" property="id"></id>
<result column="ordertime" property="ordertime"></result>
<result column="total" property="total"></result>
</collection>
</resultMap>
<select id="findAll" resultMap="userMap">
select *, orders.id oid
from orders, student
where orders.uid = student.id;
</select>
</mapper>
MyBatis注解开发
常用注解
@Insert 实现新增
@Update 实现更新
@Delete 实现删除
@Select 实现查询
@Result 实现结果集封装
@Results 可以与@Result一起使用,封装多个结果集
@One 实现一对一结果集封装
@Many 实现一对多结果集封装
public interface UserDao{
// 查询所有用户
@Select("select * from user")
public List<User> findAll();
// 根据id查询用户
@Select("select * from user where id = #{id}")
public User findById(int id);
// 删除
@Delete("delete from user where id = #{id})
public void delUser(int id);
// 添加
@Insert("insert into user(username,sex) values(#{username},#{sex})
public void save(User user);
// 更新
@Update("update user set username = #{username},sex=#{sex} where id = #{id}")
public void updateUser(User user);
}
一对一
public interface IAccountDao {
/**
* 查询所有账户,并且获取每个账户下的用户信息,一对一
* @return
*/
@Select("select * from account")
@Results(id="accountMap",value = {
@Result(id = true,column = "id",property = "id"),
@Result(column = "uid",property = "uid"),
@Result(column = "money",property = "money"),
@Result(property = "user",column = "uid",one=@One(select="com.keafmd.dao.IUserDao.findById",fetchType= FetchType.EAGER))
})
List<Account> findAll();
}
public interface IAccountDao {
/**
* 查询所有账户,并且获取每个账户下的用户信息,一对一 ,* 这里用不到这个findAll()
* @return
*/
@Select("select * from account")
@Results(id="accountMap",value = {
@Result(id = true,column = "id",property = "id"),
@Result(column = "uid",property = "uid"),
@Result(column = "money",property = "money"),
@Result(property = "user",column = "uid",one=@One(select="com.keafmd.dao.IUserDao.findById",fetchType= FetchType.EAGER))
})
List<Account> findAll();
/**
* 根据用户id查询账户信息
* @param userId
* @return
*/
@Select("select * from account where uid = #{userId}")
List<Account> findAccountByUid(Integer userId);
}
一对多
package com.keafmd.dao;
import com.keafmd.domain.User;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.mapping.FetchType;
import java.util.List;
public interface IUserDao {
/**
* 查询所有用户
* @return
*/
@Select("select * from user")
@Results(id="userMap",value={
@Result(id = true,column = "id",property = "userId"),
@Result(column = "id",property = "userId"),
@Result(column = "username",property = "userName"),
@Result(column = "sex",property = "userSex"),
@Result(column = "birthday",property = "userBirthday"),
@Result(property = "accounts" ,column = "id",
many = @Many(select = "com.keafmd.dao.IAccountDao.findAccountByUid",
fetchType = FetchType.LAZY))
})
List<User> findAll();