78144666 发表于 2016-11-25 10:00:52

使用mybatis实现CRUD

  本文介绍的是mybatis3的使用,针对使用mybatis3作为持久层框架的入门学习。下面具体讲解:



[*]
mybatis需要程序员手动建表,用于测试的建表语句如下:
--oracle10g
CREATE TABLE user_tbl (
id int PRIMARY KEY ,
name varchar2(20),
age int,
sex varchar2(5),
password varchar2(20)
)
create sequence user_seq;
INSERT INTO user_tbl VALUES (1, 'zs',18, '张三', 'zs');


 
[*]
连接数据库的工具类:

package util;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
* 连接数据库的工具类
* @author Jzl
*
*/
public class MybatisUtil {
private static SqlSessionFactory sessionFactory;
private SqlSession session;
static {
String resource = "mybatis3-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
public static SqlSessionFactory getSqlsessionfactory() {
return sessionFactory;
}
public static SqlSession getSession() {
return sessionFactory.openSession(false);
}
public void closeSession(SqlSession session) {
if (session != null) {
session.close();
session = null;
}
}
}



 
[*]
UserDao,用于实现对User表的CRUD操作:

package dao;
import java.util.List;
import entity.User;
public interface UserDao {
public List<User> getUserByName(String name);
public List<User> getAllUser();
public User getUser(String name);
public void insertUser(User user);
public void updateUser(User user);
public void deleteUser(int id);
}



 
[*]
不同于hibernate,mybatis映射文件(这里是UserDao.xml)映射的是Dao层的方法,用于将Dao层的方法与具体的sql语句绑定。

<?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="dao.UserDao">
<select id="getAllUser" resultType="entity.User">
select * from user_tbl
</select>
<select id="getUserByName" parameterType="String" resultType="entity.User">
select * from user_tbl
where name like #{name}
</select>
<select id="getUser" parameterType="String" resultType="entity.User">
select * from user_tbl where
name=#{name}
</select>
<insert id="insertUser" parameterType="entity.User">
<selectKey resultType="int" order="BEFORE" keyProperty="id">
select user_seq.nextval from dual
</selectKey>
insert into user_tbl (id,name,age,sex,password)
values
(#{id},#{name},#{age},#{sex},#{password})
</insert>
<update id="updateUser" parameterType="entity.User">
update user_tbl set name = #{name},age =
#{age},
sex = #{sex},password = #{password} where id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
delete from user_tbl where id = #{id}
</delete>
</mapper>


 
[*]
实体类User如下:

package entity;
public class User {
private int id;
private String name;
private int age;
private String sex;
private String password;
public User() {
System.out.println("--调用无参数构造方法--");
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}



 
[*]
最后就可以测试了,测试类TestUser如下:

package test;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import util.MybatisUtil;
import dao.UserDao;
import entity.User;
public class TestUser {
public void testGetByName() {
SqlSession session = MybatisUtil.getSession();
List<User> users = session.selectList("getUserByName", "%s%");
for (User user : users) {
System.out.println(user.getId() + "==" + user.getName());
}
session.commit();
session.close();
}
public void testGetAll() {
SqlSession session = MybatisUtil.getSession();
List<User> users = session.selectList("getAllUser");
for (User user : users) {
System.out.println(user.getId() + "==" + user.getName());
}
session.commit();
session.close();
}
public void testGet() {
SqlSession session = MybatisUtil.getSession();
UserDao userDao = session.getMapper(UserDao.class);
User user = userDao.getUser("zs");
System.out.println(user.getId() + "==" + user.getName());
session.commit();
session.close();
}
@Test
public void testAdd() {
SqlSession session = MybatisUtil.getSession();
UserDao userDao = session.getMapper(UserDao.class);
User user = new User();
// user.setId(10);
user.setName("zs");
user.setPassword("zs");
user.setAge(20);
user.setSex("女");
try {
userDao.insertUser(user);
System.out.println("id:" + user.getId());
// session.commit();
} catch (Exception e) {
e.printStackTrace();
}
// session.close();
}
public void testUpdate() {
SqlSession session = MybatisUtil.getSession();
UserDao userDao = session.getMapper(UserDao.class);
User user = userDao.getUser("sb");
user.setName("sa");
user.setAge(19);
userDao.updateUser(user);
session.commit();
session.close();
}
public void testDelete() {
SqlSession session = MybatisUtil.getSession();
UserDao userDao = session.getMapper(UserDao.class);
userDao.deleteUser(1001);
session.commit();
session.close();
}
}



 
[*]
附上测试项目的源代码。
页: [1]
查看完整版本: 使用mybatis实现CRUD