本节讲两种Mybatis开发方法: (1)基于传统的Dao的开发方法 (2)基于Mapper代理的开发方法
【基于传统的Dao的开发方法】
目录结构**
lib下目录
UserDao.java
package com.zxy.mybatis.dao;import com.zxy.mybatis.po.User;/** * dao接口 * @author zxy * */public interface UserDao { //根据id查询用户信息 public User findUserById(int id)throws Exception; //添加用户 public void addUser(User user)throws Exception; //删除用户 public void deleteUser(int id)throws Exception;}UserDaoImpl.java
/** * UserDao接口的实现类 */package com.zxy.mybatis.dao;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import com.zxy.mybatis.po.User;public class UserDaoImpl implements UserDao { //通过构造方法注入SqlSessionFactory PRivate SqlSessionFactory sqlSessionFactory; public UserDaoImpl(SqlSessionFactory sqlSessionFactory){ this.sqlSessionFactory=sqlSessionFactory; } @Override public User findUserById(int id) throws Exception { //因为sqlSession线程不安全,所以需要定义在方法中 SqlSession sqlSession=sqlSessionFactory.openSession(); User user=sqlSession.selectOne("test.findUserById", id); //释放资源 sqlSession.close(); return user; } @Override public void addUser(User user) throws Exception { SqlSession sqlSession=sqlSessionFactory.openSession(); sqlSession.insert("test.insertUser", user); sqlSession.commit(); sqlSession.close(); } @Override public void deleteUser(int id) throws Exception { SqlSession sqlSession=sqlSessionFactory.openSession(); sqlSession.delete("test.deleteUser", id); sqlSession.commit(); sqlSession.close(); }}User.java
package com.zxy.mybatis.po;import java.util.Date;public class User { private int id; private String username;// 用户姓名 private String sex;// 性别 private Date birthday;// 生日 private String address;// 地址 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address=" + address + "]"; }}UserDaoImplTest.java
package com.zxy.mybatis.dao;import static org.junit.Assert.*;import java.io.InputStream;import java.util.Date;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Before;import org.junit.Test;import com.zxy.mybatis.po.User;public class UserDaoImplTest { private SqlSessionFactory sqlSessionFactory; @Before public void setUp() throws Exception { String resource="SqlMapConfig.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); } @Test public void testFindUserById() throws Exception { UserDao userDao=new UserDaoImpl(sqlSessionFactory); User user=userDao.findUserById(16); System.out.println(user); } @Test public void testAddUser() throws Exception { UserDao userDao=new UserDaoImpl(sqlSessionFactory); User user=new User(); user.setSex("1"); user.setBirthday(new Date()); user.setAddress("shanxi"); user.setUsername("wnaghua"); userDao.addUser(user); } @Test public void testDeleteUser() throws Exception { UserDao userDao=new UserDaoImpl(sqlSessionFactory); userDao.deleteUser(29); }}User.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="test"><!-- 根据id获取用户信息 --> <select id="findUserById" parameterType="int" resultType="com.zxy.mybatis.po.User"> select * from user where id=#{id} </select><!-- 根据用户名模糊查询用户信息 --> <select id="findUserByName" parameterType="java.lang.String" resultType="com.zxy.mybatis.po.User"> SELECT * FROM USER WHERE username LIKE '%${value}%' </select> <!-- 插入用户 --> <insert id="insertUser" parameterType="com.zxy.mybatis.po.User"> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> SELECT LAST_INSERT_ID() </selectKey> insert into user(username,sex,birthday,address) values(#{username},#{sex},#{birthday},#{address}) </insert><!-- 删除用户 --> <delete id="deleteUser" parameterType="java.lang.Integer"> delete from user where id=#{id} </delete><!-- 更新用户 --> <update id="updateUser" parameterType="com.zxy.mybatis.po.User"> update user set username=#{username},sex=#{sex},birthday=#{birthday},address=#{address} where id=#{id} </update></mapper>log4j.properties
# Global logging configurationlog4j.rootLogger=DEBUG, stdout# Console output...log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%nSqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <!-- 和spring整合后 environments配置将废除--> <environments default="development"> <environment id="development"> <!-- 使用jdbc事务管理--> <transactionManager type="JDBC" /> <!-- 数据库连接池--> <dataSource type="POOLED"> <property name="driver" value="com.MySQL.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" /> <property name="username" value="root" /> <property name="passWord" value="123" /> </dataSource> </environment> </environments> <!-- 加载配置文件 --> <mappers> <mapper resource="sqlmap/User.xml"/> </mappers></configuration>基于Mapper代理的开发方法
四点需要遵守的规则: (1) 配置文件UserMapper.xml的配置文件的namesapce属性要设置为Mapper接口UserMapper.java的地址所在 (2) mapper.java接口中的方法名和mapper.xml中statement的id一致 (3) mapper.java接口中的方法输入参数类型和mapper.xml中 statement的parameterType指定的类型一致。 (4) mapper.java接口中的方法返回值类型和mapper.xml中statement 的resultType指定的类型一致。
目录结构
UserMapper.java
package com.zxy.mybatis.mapper;import com.zxy.mybatis.po.User;/** * mapper接口 * @author zxy * */public interface UserMapper { //根据id查询用户信息 public User findUserById(int id)throws Exception; //添加用户 public void insertUser(User user)throws Exception; //删除用户 public void deleteUser(int id)throws Exception;}User.java
package com.zxy.mybatis.po;import java.util.Date;public class User { private int id; private String username;// 用户姓名 private String sex;// 性别 private Date birthday;// 生日 private String address;// 地址 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address=" + address + "]"; }}UserMapperTest.java(测试文件)
package com.zxy.mybatis.mapper;import static org.junit.Assert.*;import java.io.InputStream;import java.util.Date;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.Before;import org.junit.Test;import com.zxy.mybatis.po.User;public class UserMapperTest { private SqlSessionFactory sqlSessionFactory; @Before public void setUp() throws Exception { String resource="SqlMapConfig.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); } @Test public void testFindUserById() throws Exception { SqlSession sqlSession=sqlSessionFactory.openSession(); UserMapper usermapper=sqlSession.getMapper(UserMapper.class); User user=usermapper.findUserById(1); sqlSession.close(); System.out.println(user); } @Test public void testInsertUser() throws Exception { SqlSession sqlSession=sqlSessionFactory.openSession(); UserMapper usermapper=sqlSession.getMapper(UserMapper.class); User user=new User(); user.setSex("1"); user.setBirthday(new Date()); user.setUsername("力量12"); user.setAddress("山阴县ads"); usermapper.insertUser(user); sqlSession.commit(); sqlSession.close(); } @Test public void testDeleteUser() throws Exception { SqlSession sqlSession=sqlSessionFactory.openSession(); UserMapper usermapper=sqlSession.getMapper(UserMapper.class); usermapper.deleteUser(34); sqlSession.commit(); sqlSession.close(); }}UserMapper.xml(方法没有完全实现)
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.zxy.mybatis.mapper.UserMapper"><!-- 根据id获取用户信息 --> <select id="findUserById" parameterType="int" resultType="com.zxy.mybatis.po.User"> select * from user where id=#{id} </select><!-- 根据用户名模糊查询用户信息 --> <select id="findUserByName" parameterType="java.lang.String" resultType="com.zxy.mybatis.po.User"> SELECT * FROM USER WHERE username LIKE '%${value}%' </select> <!-- 插入用户 --> <insert id="insertUser" parameterType="com.zxy.mybatis.po.User"> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> SELECT LAST_INSERT_ID() </selectKey> insert into user(username,sex,birthday,address) values(#{username},#{sex},#{birthday},#{address}) </insert><!-- 删除用户 --> <delete id="deleteUser" parameterType="java.lang.Integer"> delete from user where id=#{id} </delete><!-- 更新用户 --> <update id="updateUser" parameterType="com.zxy.mybatis.po.User"> update user set username=#{username},sex=#{sex},birthday=#{birthday},address=#{address} where id=#{id} </update></mapper>log4j.properties
# Global logging configurationlog4j.rootLogger=DEBUG, stdout# Console output...log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%nSqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <!-- 和spring整合后 environments配置将废除--> <environments default="development"> <environment id="development"> <!-- 使用jdbc事务管理--> <transactionManager type="JDBC" /> <!-- 数据库连接池--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" /> <property name="username" value="root" /> <property name="password" value="123" /> </dataSource> </environment> </environments> <!-- 加载配置文件 --> <mappers> <mapper resource="mapper/UserMapper.xml"/> </mappers></configuration>新闻热点
疑难解答