使用mybatis3(ibatis)实现CRUD
本文介绍的是mybatis3的使用,针对使用mybatis3作为持久层框架的入门学习。下面具体讲解:
- mybatis需要程序员手动建表,用于测试的建表语句如下:
--oracle10gCREATE 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_tblwhere name like #{name}</select><select id="getUser" parameterType="String" resultType="entity.User">select * from user_tbl wherename=#{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();}@Testpublic 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();}}?附上测试项目的源代码。