Mybatis连接Oracle实现增删改查实践
1. 首先要在项目中增加Mybatis和Oracle的Jar文件
这里我使用的版本为ojdbc7
Mybatis版本为:3.2.4
2. 在Oracle中创建User表
create table T_USERS
(
ID NUMBER not null,
NAME VARCHAR2(30),
SEX VARCHAR2(3),
BIRS DATE,
MESSAGE CLOB
);
create sequence SEQ_T_USERS_ID
minvalue 1
maxvalue 99999999
start with 1
increment by 1
cache 20;
3.创建User类
public class User {
	 private String name;
	    private String sex;
	    private Integer id;
	    private Date birs;
	    private String message;  
	    public String getMessage() {
	        return message;
	    }  
	    public void setMessage(String pMessage) {
	        this.message = pMessage;
	    }  
	    public Date getBirs() {
	        return birs;
	    }  
	    public void setBirs(Date pbirs) {
	        this.birs = pbirs;
	    }  
	    public String getName() {
	        return name;
	    }  
	    public void setName(String name) {
	        this.name = name;
	    }  
	    public String getSex() {
	        return sex;
	    }  
	    public void setSex(String psex) {
	        this.sex = psex;
	    }  
	    public Integer getId() {
	        return id;
	    }  
	    public void setID(Integer pid) {
	        this.id = pid;
	    }  
	    public User() {
	    }
		@Override
		public String toString() {
			return "User [name=" + name + ", sex=" + sex + ", id=" + id + ", birs=" + birs + ", message=" + message
					+ "]";
		}  
}
4. 创建UsersMapper接口
public interface UsersMapper {
	  public void add(User t);  
	    public void update(User t);  
	    public void updateBySelective(User t);  
	    public void delete(Object id);  
	    public User queryById(Object id);  
	    public List<User> queryBySelective(User t);  
	    public int queryByCount(User t);  
	    public List<User> queryByList(User t);
}
5. 创建OracleClobTypeHandler.java
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler; import oracle.sql.CLOB; public class OracleClobTypeHandler implements TypeHandler<Object> { public Object valueOf(String param) {
return null;
} public Object getResult(ResultSet arg0, String arg1) throws SQLException {
CLOB clob = (CLOB) arg0.getClob(arg1);
return (clob == null || clob.length() == 0) ? null : clob.getSubString((long) 1, (int) clob.length());
} public Object getResult(ResultSet arg0, int arg1) throws SQLException {
return null;
} public Object getResult(CallableStatement arg0, int arg1) throws SQLException {
return null;
} public void setParameter(PreparedStatement arg0, int arg1, Object arg2, JdbcType arg3) throws SQLException {
CLOB clob = CLOB.empty_lob();
clob.setString(1, (String) arg2);
arg0.setClob(arg1, clob);
} }
6. 创建配置文件
configuration.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration> <typeAliases>
<!--给实体类起一个别名 user 不过建议不要起别名,容易搞混-->
<typeAlias type="com.example.oracle.User" alias="User" />
</typeAliases>
<!--数据源配置 这块用 Oracle数据库 -->
<environments default="development">
<environment id="development">
<transactionManager type="jdbc" />
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl" />
<property name="username" value="system" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<!--UsersMapper.xml装载进来 同等于把“dao”的实现装载进来 -->
<mapper resource="UsersMapper.xml" />
</mappers>
</configuration>
UsersMapper.xml文件
<?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">
<!--这块等于dao接口的实现 namespace必须和接口的类路径一样-->
<mapper namespace="com.example.mapper.UsersMapper" > <!-- Result Map-->
<resultMap type="com.example.oracle.User" id="BaseResultMap">
<result property="id" column="id" />
<result property="name" column="name" />
<result property="sex" column="sex" />
<result property="birs" column="birs" jdbcType="TIMESTAMP"/>
<result property="message" column="message" jdbcType="CLOB" javaType = "java.lang.String" typeHandler ="com.example.oracle.OracleClobTypeHandler"/>
</resultMap> <!-- 表名-->
<sql id="Tabel_Name">
t_users
</sql> <!-- 表中所有列 -->
<sql id="Base_Column_List" >
id,name,sex,birs,message
</sql> <!-- 查询条件 -->
<sql id="Example_Where_Clause">
where 1=1
<trim suffixOverrides=",">
<if test="id != null">
and id = #{id}
</if>
<if test="name != null and name != ''">
and name like concat(concat('%', '${name}'), '%')
</if>
<if test="sex != null and sex != ''">
and sex like concat(concat('%', '${sex}'), '%')
</if>
<if test="birs != null">
and birs = #{birs}
</if>
<if test="message != null">
and message = #{message}
</if>
</trim>
</sql> <!-- 下面的id都和接口UsersMapper中的方法名一样--> <!-- 1.新增记录 -->
<insert id="add" parameterType="Object" >
<selectKey resultType="int" order="BEFORE" keyProperty="id">
select seq_t_users_id.nextval as id from dual
</selectKey>
insert into t_users(id,name,sex,birs,message) values(#{id},#{name},#{sex},#{birs},#{message,jdbcType=CLOB})
</insert> <!-- 2.根据id修改记录-->
<update id="update" parameterType="Object" >
update t_users set name=#{name},sex=#{sex},birs=#{birs},message=#{message} where id=#{id}
</update> <!-- 3.只修改不为空的字段 -->
<update id="updateBySelective" parameterType="Object" >
update t_users set
<trim suffixOverrides="," >
<if test="name != null and name != '' ">
name=#{name},
</if>
<if test="sex != null and sex != '' ">
sex=#{sex},
</if>
<if test="birs != null ">
birs=#{birs},
</if>
<if test="message != null and message != '' ">
message=#{message},
</if>
</trim> where id=#{id}
</update> <!-- 4.根据id进行删除 -->
<delete id="delete" parameterType="Object">
delete from t_users where id = #{id}
</delete> <!-- 5.根据id查询 -->
<select id="queryById" resultMap="BaseResultMap" parameterType="Object">
select
<include refid="Base_Column_List" />
from t_users where id = #{id}
</select> <!-- 6.查询列表,只查询不为空的字段 -->
<select id="queryBySelective" resultMap="BaseResultMap" parameterType="Object">
select
<include refid="Base_Column_List" />
from t_users
<include refid="Example_Where_Clause" />
</select> <!-- 7.列表总数 -->
<select id="queryByCount" resultType="java.lang.Integer" parameterType="Object">
select count(1) from t_users
<include refid="Example_Where_Clause" />
</select> <!-- 8.查询列表 -->
<select id="queryByList" resultMap="BaseResultMap" parameterType="Object">
select
<include refid="Base_Column_List" />
from t_users
<include refid="Example_Where_Clause"/>
</select>
</mapper>
两个xml文件路径为:

7 .在main方法中测试
public class OracleMain {
	private static SqlSessionFactory getSessionFactory(){
		SqlSessionFactory sessionFactory = null;
		String resource = "configuration.xml";
		try{
			sessionFactory = new SqlSessionFactoryBuilder()
					.build(Resources.getResourceAsReader(resource));
		}catch(IOException e){
			e.printStackTrace();
		}
		return sessionFactory;
	}
	public static void main(String[] args) {
		 SqlSession sqlSession = getSessionFactory().openSession();
		 UsersMapper dao = sqlSession.getMapper(UsersMapper.class);
	     //删除表中所有信息
	    User nullBean = new User();
	    List<User> delList = dao.queryByList(nullBean);
	    for(User user: delList){
    		dao.delete(user.getId());
    	}
	    DateFormat dd=new SimpleDateFormat("yyyy-MM-dd");
        Date date=null;
        try {
            date = dd.parse("1985-01-01");
        } catch (ParseException e) {
            e.printStackTrace();
        }  
	    //新增用戶
		User bean = new User();
		bean.setName("张三");
		bean.setSex("男");
		bean.setBirs(date);
		bean.setMessage("您好,我是张三");
		dao.add(bean);
		bean = new User();
		bean.setName("李四");
		bean.setSex("男");
		bean.setBirs(date);
		bean.setMessage("您好,我是李四");
		dao.add(bean);
		printUserInfo(dao);
		//查詢并更新
		bean = new User();
		bean.setName("李四");
		List<User> list = dao.queryByList(bean);
		for(User user : list){
			user.setName("王五");
			user.setSex("女");
			dao.update(user);
		}
		System.out.println("---------更新--------------");
		printUserInfo(dao);
		int num = dao.queryByCount(nullBean);
		System.out.println("num="+ num);
		sqlSession.commit();  
	}
	private static void printUserInfo(UsersMapper dao) {
		User nullBean = new User();
		List<User> list = dao.queryByList(nullBean);
		for(User user : list){
			System.out.println(user.getName() + " " + user.getMessage());
		}
	}
}
Mybatis连接Oracle实现增删改查实践的更多相关文章
- 【转】mybatis连接Oracle做增删改查
		原文地址:http://blog.csdn.net/liumengcheng/article/details/34422475 入门请看http://blog.csdn.NET/liumengchen ... 
- ASP.NET C# 连接 Oracle数据库增删改查,事务
		一.知识介绍 ①ASP.NET 使用的是MVC模式,开发工具Visual studio ,语言C# ②Oracle是比较重型的数据库,这里主要介绍连接数据库,对数据进行具体的使用 ③Visual St ... 
- C# 连接 Oracle数据库增删改查,事务
		一. 前情提要 一般.NET环境连接Oracle数据库,是通过 TNS/SQL.NET 配置文件,而 TNS 必须要 Oracle 客户端(如果连接的是服务器的数据库,本地还要装一个 client , ... 
- java 连接oracle 进行增删改查
		1.在DAO层新增类OraclePersionDao package com.test.dao; import java.sql.*; /** * Created by wdw on 2017/9/1 ... 
- MyBatis学习系列二——增删改查
		目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ... 
- Java连接MongoDB进行增删改查
		1.导入必须的包: 详情看项目:http://pan.baidu.com/s/1cvDAOY 2.通过Myeclipse创建WEB项目 3. 3.bean:创建实体类 package com.bean ... 
- mvc模式jsp+servel+dbutils oracle基本增删改查demo
		mvc模式jsp+servel+dbutils oracle基本增删改查demo 下载地址 
- mvc模式jsp+servel+jdbc oracle基本增删改查demo
		mvc模式jsp+servel+jdbc oracle基本增删改查demo 下载地址 
- Java连接MySQL数据库增删改查通用方法
		版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ... 
随机推荐
- 059——VUE中vue-router之路由嵌套在文章系统中的使用方法:
			<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
- (zz)设置单元格的宽度和高度
			(zz)设置单元格的宽度和高度 博客分类: POI生成Excel 在Excel中,单元格的宽度其实就是列的宽度,因为Excel假设这一列的单元格的宽度肯定一致.所以要设置单元格的宽度,我们就得从列 ... 
- OO第二次单元总结
			OO第二次单元总结 前言 第二单元的三次作业:系列电梯与多线程. 第五次作业 (1)设计策略 电梯的第一次作业是单部傻瓜电梯,采用FAFS调度策略,电梯按队列顺序依次处理请求,单次只处理一个请求.本次 ... 
- 指针和const一些注意事项
			1.常量指针(底层const) 指向常量的指针,指针所指向的对象的值无法被修改,若想存放常量对象的地址,只能使用指向常量的指针. 2.指针常量(顶层const) 指针本身是常量,指针本身的值不可修改. ... 
- Cross-Site Script
			Cross-Site Script(跨站脚本)XSS 整理于<浅析XSS(Cross Site Script)漏洞原理> 了解XSS的触发条件就先得从HTML(超文本标记语言)开始,我 ... 
- php 跳出循环的几种方式
			PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式: <?php$i = 1;whil ... 
- WebGL编程指南案例解析之平移和旋转的矩阵实现
			手写各种矩阵: //矩阵 var vShader = ` attribute vec4 a_Position; uniform mat4 u_xformMatrix; void main(){ gl_ ... 
- 【计算机视觉】如何使用opencv自带工具训练人脸检测分类器
			前言 使用opencv自带的分类器效果并不是很好,由此想要训练自己的分类器,正好opencv有自带的工具进行训练.本文就对此进行展开. 步骤 1.查找工具文件: 2.准备样本数据: 3.训练分类器: ... 
- liunx用户管理的基本命令
			1.passwd 修改用户密码 2.useradd 用户组名 增加用户组 3.su 用户名 切换用户名 4.usermod 用户更改 5.userdel 用户删除 
- git中的bug分支和Feature分支
			/*游戏或者运动才能让我短暂的忘记心痛,现如今感觉学习比游戏和运动还重要——曾少锋*/ 如果对于分支还不太明白的学者.请先参考:http://www.cnblogs.com/zengsf/p/7512 ... 
