1、使用mapper代理的方法开发dao方法
(1)编写映射文件
(2)编写mapper接口
相当于dao接口,需要遵循以下四个开发规范:
a)UserDao.java接口中的方法名称和UserMapper.xml中的statement的id一致
b)UserDao.java接口中的方法输入参数类型和UserMapper.xml中的statement的parameterType指定的类型一致
c)UserDao.java接口中的方法返回值类型和UserMapper.xml中的statement的resultType指定的类型一致
d)UserMapper.xml中的namespace等于UserDao接口地址
2、实例
(1)User.java
public class User {
private Integer id;
private String name;
private String password;
//get和set方法
}
(2)UserDao.java
/*
* UserDao.java接口中的方法名称和UserMapper.xml中的statement的id一致
* UserDao.java接口中的方法输入参数类型和UserMapper.xml中的statement的parameterType指定的类型一致
* UserDao.java接口中的方法返回值类型和UserMapper.xml中的statement的resultType指定的类型一致
*/
public interface UserDao {
public User findUserById(int id) throws Exception;
public List<User> findUserByName(String name) throws Exception;
public void insertUser(User user) throws Exception;
public void updateUserById(User user) throws Exception;
public void deleteUserById(int id) throws Exception;
}
(3)UserMapper.xml
<!-- UserMapper.xml中的namespace等于UserDao接口地址 -->
<mapper namespace="com.mybatis.dao.UserDao">
<!-- 可以针对parameterType和resultType指定的类型定义一些别名,方便开发,例如int就是Integer的别名(默认),user是自定义的别名 -->
<select id="findUserById" parameterType="int" resultType="user">
select * from user where id=#{id}
</select>
<select id="findUserByName" parameterType="java.lang.String" resultType="com.mybatis.bean.User">
select * from user where name like '%${value}%'
</select>
<insert id="insertUser" parameterType="com.mybatis.bean.User">
insert into user(id,name,password) value(#{id},#{name},#{password})
</insert>
<update id="updateUserById" parameterType="com.mybatis.bean.User">
update user set name=#{name},password=#{password} where id=#{id}
</update>
<delete id="deleteUserById" parameterType="java.lang.Integer">
delete from user where id=#{id}
</delete>
</mapper>
(4)db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/hwd
jdbc.username=root
jdbc.password=123456
(5)mybatis-config.xml
<configuration>
<!-- 加载属性文件 -->
<properties resource="config/db.properties"></properties>
<!-- 全局参数配置 -->
<!-- <settings></settings> -->
<!-- 定义别名 -->
<typeAliases>
<!-- 单个别名的定义,type指定类型的路径,alias指定别名 -->
<!-- <typeAlias type="com.mybatis.bean.User" alias="user"/> -->
<!-- 批量别名的定义,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写) -->
<package name="com.mybatis.bean"/>
</typeAliases>
<!-- 类型处理器,用于java类型和jdbc类型的映射,mybatis自带的类型处理器基本上满足需求,无需单独定义 -->
<!-- <typeHandlers></typeHandlers> -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 将数据库连接参数配置在db.properties文件中,方便对参数进行统一管理,然后加载db.properties的属性值 -->
<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>
<!-- 通过resource加载单个的映射文件-->
<mapper resource="com/mybatis/mapper/UserMapper.xml"/>
</mappers>
</configuration>
(6)UserDaoTest
public class UserDaoTest {
private SqlSessionFactory sqlSessionFactory;
@Before
public void setUp() throws Exception {
String resource = "config/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testFindUserById() throws Exception{
SqlSession sqlSession = sqlSessionFactory.openSession();
//创建UserDao对象
UserDao userDao = sqlSession.getMapper(UserDao.class);
//调用UserDao方法
User user = userDao.findUserById(1);
System.out.println(user.toString());
sqlSession.close();
}
@Test
public void testFindUserByName() throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> users = userDao.findUserByName("小明");
System.out.println(users.toString());
sqlSession.close();
}
@Test
public void testInsertUser() throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
User user = new User();
user.setId(3);
user.setName("黄小红");
user.setPassword("789");
userDao.insertUser(user);
sqlSession.commit();
sqlSession.close();
}
@Test
public void testUpdateUserById() throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
User user = new User();
user.setId(3);
user.setName("小红");
user.setPassword("777");
userDao.updateUserById(user);
sqlSession.commit();
sqlSession.close();
}
@Test
public void testDeleteUserById() throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
userDao.deleteUserById(3);
sqlSession.commit();
sqlSession.close();
}
}