- 主要内容
- 使用了MyBatis,如果还是用传统方式,套路不变(Mybatis的最大作用在于映射,解耦sql和代码)
- 传统开发方式:Dao层要定义接口,再定义实现类/impl/..
- 能不能只定义接口,剩下事情就交给? 可以
- 操作如下
- 习惯上,我们将Dao命名为Mapper层(还是Dao层),在里面定义接口
- 配置sqlMapConfig.xml 和 UserMapper.xml 和 上一节基本没有不用
- 但要求:
- UserMapper.xml Mapper标签namespace 要和定义的接口全限定名相同
- Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
- Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
- Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
- 如上,MyBatis的Dao层实现就完成了,实操时获得mapper 对象并用其方法执行:
- UserMapper mapper = sqlSession.getMapper(UserMapper.class);
- 由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。 ```xml package com.jquan.mapper;
- 传统开发方式:Dao层要定义接口,再定义实现类/impl/..
import com.jquan.domain.User;
import java.util.List;
public interface UserMapper {
List
package com.jquan.test;
import com.jquan.domain.User; import com.jquan.mapper.UserMapper; import com.sun.corba.se.spi.orbutil.fsm.Input; 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;
/* Mybatis 的Dao 层实现/ public class MyBatisTestDao {
@Test
public void test() throws IOException {
InputStream resources = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resources);
SqlSession sqlSession = sqlSessionFactory.openSession();
/*UserMapper , 就相当于我们以前Dao层的User类Impl实现*/
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.findAll();//直接调用方法,我们不需要像 MyBatisTest中一样操作 sql API: select,update,...
System.out.println(userList);
System.out.println("------------------");
List<User> user = mapper.findById(1);
System.out.println(user);
}
}
```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="com.jquan.mapper.UserMapper">
<!--查询全部-->
<select id="findAll" resultType="com.jquan.domain.User">
select * from user
</select>
<!--根据id查询-->
<select id="findById" resultType="user" parameterType="int">
select * from user where id=#{id}
</select>
<!--插入-->
<insert id="saveUser" parameterType="user">
insert into user values (#{id},#{username},#{password});
</insert>
<!--删除-->
<delete id="delete" parameterType="int">
delete from user where id=#{id};
</delete>
<!--修改操作-->
<update id="update" parameterType="user">
update user set username=#{username},password=#{password} where id = #{id}
</update>
</mapper>