本节来介绍原始dao的开发方法,原始dao方式存在一些问题,比如:存在大量的模板代码(session.close()、session.commit()。。。)、在调用SqlSession的方法时参数statement的ID存在硬编码,且传入的参数变量值由于泛型的原因有可能会出现类型传递错误(但是编译器并不报错,只在运行时会出错)。
原始dao方法虽然不建议使用,但是在实际开发项目中有时候也会用到,在此简单录一下。
2、模型类:
package com.wp.model; import java.util.Date; public class User { private int id; private String userName; private int sex; private int age; private Date birthDay; private String address; // get set public User() { super(); } public User(int id, String userName, int sex, int age, Date birthDay, String address) { super(); this.id = id; this.userName = userName; this.sex = sex; this.age = age; this.birthDay = birthDay; this.address = address; } public User(String userName, int sex, int age, Date birthDay, String address) { super(); this.userName = userName; this.sex = sex; this.age = age; this.birthDay = birthDay; this.address = address; } public String toString() { return "User [address=" + address + ", age=" + age + ", birthDay=" + birthDay + ", id=" + id + ", sex=" + sex + ", userName=" + userName + "]"; } }
3、mybatis全局配置文件:
4、映射文件:
insert into user(username, sex, age, birthday, address) values(#{userName}, #{sex}, #{age}, #{birthDay}, #{address}) update user set username=#{userName}, sex=#{sex}, age=#{age}, birthday=#{birthDay}, address=#{address} where id=#{id} delete from user where id=#{id}
5、dao接口:
package com.wp.dao; import java.util.List; import com.wp.model.User; public interface UserDao { public User getById(int id); public ListgetByName(String userName); public void add(User user); public void update(User user); public void delete(int id); }
6、接口实现类:
由于SqlSessionFactory是线程安全的,因此在实现类中共用一个SqlSessionFactory即可。但是SqlSession绝对不能共用。
package com.wp.dao.impl; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import com.wp.dao.UserDao; import com.wp.model.User; public class UserDaoImpl implements UserDao { private SqlSessionFactory sessionFactory; public UserDaoImpl(SqlSessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } @Override public void add(User user) { SqlSession session = this.sessionFactory.openSession(); session.insert("UserSpace.addUser", user); session.commit(); session.close(); } @Override public void delete(int id) { SqlSession session = this.sessionFactory.openSession(); session.delete("UserSpace.deleteById", id); session.commit(); session.close(); } @Override public User getById(int id) { SqlSession session = this.sessionFactory.openSession(); User user = session.selectOne("UserSpace.selectById", id); session.close(); return user; } @Override public ListgetByName(String userName) { SqlSession session = this.sessionFactory.openSession(); List userList = session.selectList("UserSpace.selectByVagueName", userName); session.close(); return userList; } @Override public void update(User user) { SqlSession session = this.sessionFactory.openSession(); session.update("UserSpace.updateUser", user); session.commit(); session.close(); } }
7、测试程序:
在测试类开始获取全局的SqlSessionFactory,并传递给接口实现类。
package com.wp.dao.impl; import java.io.InputStream; import java.util.Date; import java.util.List; 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.wp.dao.UserDao; import com.wp.model.User; import com.wp.util.DateUtil; public class UserDaoImplTest { private SqlSessionFactory sessionFactory; @Before public void setUp() throws Exception { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); this.sessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } @Test public void testAdd() { Date date = DateUtil.parseStrToFullDate("2001-11-20", "yyyy-MM-dd"); User user = new User("敏敏特穆尔", 0, 17, date, "你在哪,我就在哪!"); UserDao userDao = new UserDaoImpl(this.sessionFactory); userDao.add(user); System.out.println("添加完成。。。"); } @Test public void testDelete() { UserDao userDao = new UserDaoImpl(this.sessionFactory); userDao.delete(3); System.out.println("删除完成。。。"); } @Test public void testGetById() { UserDao userDao = new UserDaoImpl(this.sessionFactory); User user = userDao.getById(11); System.out.println("根据主键查询:" + user); } @Test public void testGetByName() { UserDao userDao = new UserDaoImpl(this.sessionFactory); ListuserList = userDao.getByName("%谢%"); System.out.println("名称查询:" + userList); } @Test public void testUpdate() { UserDao userDao = new UserDaoImpl(this.sessionFactory); Date date = DateUtil.parseStrToFullDate("1073-11-20", "yyyy-MM-dd"); User user = new User(12, "白眉鹰王", 1, 99, date, "鹰爪功!"); userDao.update(user); System.out.println("更新完成。。。"); } }