首页 > 学院 > 开发设计 > 正文

Mybatis学习【1】

2019-11-06 09:21:51
字体:
来源:转载
供稿:网友

本节讲两种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%n

SqlMapConfig.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%n

SqlMapConfig.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>
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表