一、 Mybatis项目搭建
1. MyBatis介绍
MyBatis 是支持普通 SQL 查询, 存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索封装。 MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain OldJava Objects,普通的 Java 对象)映射成数据库中的记录。
JDBC->dbutils(无对象概念)->MyBatis(半对象)->Hibernate(全对象)
2. 搭建
1) 新建项目,添加jar包
【mybatis】mybatis-3.1.1.jar
【oracle驱动包】ojdbc6.jar
2) 建表
--序列
create sequence seq_user
start with 1
increment by 1;
CREATE TABLE users(id number(8) PRIMARY KEY,NAME VARCHAR2(20),age number(4));
INSERT INTO users(id,NAME,age) VALUES(seq_user.nextval,'A', 12);
INSERT INTO users(id,NAME,age)VALUES(seq_user.nextval,'B', 11);
3) 添加Mybatis的配置文件conf.xml
右键项目->others->搜索xml,点击xml file,新建conf.xml<?xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTDConfig 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver"value="oracle.jdbc.driver.OracleDriver" />
<property name="url"value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
<property name="username"value="mybatis" />
<property name="password"value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/mybatis/entity/userMapper.xml"/>
</mappers>
</ configuration >4) 定义表所对应的实体类
package com.mybatis.entity;
public class User {
private int id;
private String name;
private int age;
//添加get/set方法
//重写toString()
}
5) 定义操作 users 表的 sql 映射文件 userMapper.xml(对users表增删改查)
<?xml version="1.0"encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTDMapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mybatis.entity.userMapper">
<insert id="addUser"parameterType="com.mybatis.entity.User">
insertinto users (id,name,age) values (id_seq.nextval,#{name},#{age})
</insert>
<delete id="deleteUser"parameterType="int">
deletefrom users where id=#{id}
</delete>
<update id="updateUser"parameterType="com.mybatis.entity.User">
updateusers set name=#{name},age=#{age} where id=#{id}
</update>
<select id="getUserById"parameterType="int" resultType="com.mybatis.entity.User">
select* from users where id=#{id}
</select>
<select id="getAllUser"resultType="com.mybatis.entity.User">
select* from users
</select>
</ mapper >6) 在 conf.xml 文件中注册 userMapper.xml 文件
<mappers>
<mapper resource="com/mybatis/entity/userMapper.xml"/>
</ mappers >
7) 新建一个工具类DbUtil
package com.mybatis.util;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class DbUtil {
public static SqlSession getSession() {
SqlSessionsession = null;
try {
Stringresource = "conf.xml";
//加载 mybatis 的配置文件(它也加载关联的映射文件)
Readerreader = Resources.getResourceAsReader(resource);
//构建 sqlSession 的工厂
SqlSessionFactorysessionFactory =new SqlSessionFactoryBuilder().build(reader);
//创建能执行映射文件中 sql 的 sqlSession
session = sessionFactory.openSession();
}catch (Exception e) {
e.printStackTrace();
}
return session;
}
}8) 编写测试代码,执行定义的增删改查
package com.mybatis.test;
import static org.junit.Assert.*;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.mybatis.entity.User;
import com.mybatis.util.DbUtil;
public class UserTest {
//通过工具类获取session
SqlSessionsession = DbUtil.getSession();
Useruser = new User();
@Test
public void testAddUser() {
int insertok = 0;
try {
//映射 sql 的标识字符串
Stringstatement="com.mybatis.entity.userMapper"+"."+"addUser";
user.setName("zhangsan");
user.setAge(12);
//执行insert添加用户
insertok = session.insert(statement, user);
if(insertok>0){
session.commit();
System.out.println("插入成功");
}else {
System.out.println("插入失败");
}
}catch (Exception e) {
e.printStackTrace();
fail("Not yet implemented");
}
}
@Test
public void deleteUser(){
int deleteok = 0;
try {
Stringstatement="com.mybatis.entity.userMapper.deleteUser";
user.setId(8);
//执行delete将对应id的用户删除
deleteok = session.delete(statement, user.getId());
if(deleteok>0){
session.commit();
System.out.println("删除成功");
}else {
System.out.println("删除失败");
}
}catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void updateUser(){
int updateok = 0;
try {
Stringstatement = "com.mybatis.entity.userMapper.updateUser";
user.setId(6);
user.setName("monkey");
user.setAge(11);
//执行update,将对应id的用户更新
updateok = session.update(statement, user);
if(updateok>0){
session.commit();
System.out.println("更新成功");
}else {
System.out.println("更新失败");
}
}catch (Exception e) {
e.printStackTrace();
fail("Not yet implemented");
}
}
@Test
public void selectAllUser(){
try {
Stringstatement = "com.mybatis.entity.userMapper.getAllUser";
List<User>users = null;
//执行查询返回所有user
users = session.selectList(statement);
System.out.println(users);
}catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void selectUserById(){
try {
Stringstatement = "com.mybatis.entity.userMapper.getUserById";
//执行查询返回一个唯一 user 对象的 sql
user = session.selectOne(statement, 6);
System.out.println(user);
}catch (Exception e) {
e.printStackTrace();
}
}
}