Mybatis之Oracle增删查改示例--转
http://blog.csdn.net/bingjie1217/article/details/21088431?utm_source=tuicool&utm_medium=referral
oracle表结构
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;
配置mybatis配置文件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">
<mapper namespace="examples.mapper.UsersMapper" > <!-- Result Map-->
<resultMap type="examples.bean.Users" 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 ="examples.service.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> <!-- 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>
Mapper类接口
package examples.mapper; import java.util.List; public interface UsersMapper<T> { public void add(T t); public void update(T t); public void updateBySelective(T t); public void delete(Object id); public T queryById(Object id); public List<T> queryBySelective(T t); public int queryByCount(T t); public List<T> queryByList(T t); }
类型转换工具类
package examples.service; import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import oracle.sql.CLOB; import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler; public class OracleClobTypeHandler implements TypeHandler<Object> { public Object valueOf(String param) {
return null;
} @Override
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());
} @Override
public Object getResult(ResultSet arg0, int arg1) throws SQLException {
return null;
} @Override
public Object getResult(CallableStatement arg0, int arg1) throws SQLException {
return null;
} @Override
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);
}
}
Spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"
default-autowire="byType"> <!-- 配置数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"><value>oracle.jdbc.driver.OracleDriver</value></property>
<property name="url"><value>jdbc:oracle:thin:@127.0.0.1:1521:pms</value></property>
<property name="username"><value>pms</value></property>
<property name="password"><value>pms</value></property>
</bean> <!-- 配完数据源 和 拥有的 sql映射文件 sqlSessionFactory 也可以访问数据库 和拥有 sql操作能力了 -->
<!--
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations">
<list>
<value>classpath:examples/mybatis/oracle/UsersMapper.xml</value>
</list>
</property>
</bean> <!-- 通过设置 mapperInterface属性,使接口服务bean 和对应xml文件管理 可以使用其中的sql -->
<bean id="dao" class="org.mybatis.spring.mapper.MapperFactoryBean">
<!-- 此处等同于 Mybatis 中 ServerDao serverDao = sqlSession.getMapper(ServerDao.class); 指明映射关系 -->
<property name="mapperInterface" value="examples.mapper.UsersMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
</beans>
测试类
package examples.service; import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import examples.bean.Users;
import examples.mapper.UsersMapper; public class TestUsersService { @SuppressWarnings("unchecked")
public static void main(String[] args) throws ParseException {
ApplicationContext ac =
new ClassPathXmlApplicationContext("classpath:/examples/service/spring.xml");
UsersMapper<Users> dao = (UsersMapper<Users>)ac.getBean("dao"); //删除表中所有信息
Users nullBean = new Users();
List<Users> delList = dao.queryByList(nullBean);
if(delList != null) {
for(Users user : delList) {
dao.delete(user.getId());
}
} //新增
Users bean = new Users();
bean.setName("ding");
bean.setSex("男");
bean.setBirs(new SimpleDateFormat("yyyy-MM-dd").parse("1985-01-01"));
bean.setMessage("This is Clob!");
dao.add(bean); List<Users> list = dao.queryByList(nullBean);
if(list != null) {
for(Users user : list) {
System.out.println(user);
}
} //查询并更新
bean = new Users();
bean.setName("ding");
List<Users> queList = dao.queryByList(bean);
if(queList != null) {
for(Users user : list) {
user.setSex("女");
dao.updateBySelective(user);
}
} list = dao.queryByList(nullBean);
if(list != null) {
for(Users user : list) {
System.out.println(user);
}
} //查询并更新
bean = new Users();
bean.setName("ding");
List<Users> queList2 = dao.queryByList(bean);
if(queList != null) {
for(Users user : queList2) {
user.setSex("男");
user.setMessage("");
dao.update(user);
}
} list = dao.queryByList(nullBean);
if(list != null) {
for(Users user : list) {
System.out.println(user);
}
} int num = dao.queryByCount(nullBean);
System.out.println("num=" + num); } }
Mybatis之Oracle增删查改示例--转的更多相关文章
- Mybatis基础配置及增删查改操作
一.简介 平时我们都用JDBC访问数据库,除了需要自己写SQL之外,还必须操作Connection, Statement, ResultSet 这些其实只是手段的辅助类. 不仅如此,访问不同的表,还会 ...
- mybatis实现简单的增删查改
接触一个新技术,首先去了解它的一些基本概念,这项技术用在什么方面的.这样学习起来,方向性也会更强一些.我对于mybatis的理解是,它是一个封装了JDBC的java框架.所能实现的功能是对数据库进行增 ...
- mybatis、spring、mysql、maven实现简单增删查改
之前写过的mybatis博客作为学习mybatis.spring还是不太合适. 现在找到一个不错的例子,首先将这个完整的mybatis增删查改例子在本地上实现出来,然后再进行学习. 项目结构与运行结果 ...
- hibernate基础增删查改简单实例
hibernate 基础理论知识网上很多,可以百度和google.这里不做多的介绍,以一个User表来开展例子 建一个web-project 我这里用了junit单元测试环境来进行增删查改的测试,别的 ...
- 极极极极极简的的增删查改(CRUD)解决方案
去年这个时候写过一篇全自动数据表格的文章http://www.cnblogs.com/liuyh/p/5747331.html.文章对自己写的一个js组件做了个概述,很多人把它当作了一款功能相似的纯前 ...
- MERGE批量增删查改数据
MERGE优点: 在批量处理数据的时候,我可以用到merge一次完成数据处理. 示例代码一: MERGE INTO student AS t using ( AS age) s ON t.Age=s. ...
- mysql 增删查改
非关系型数据库关系型数据库Oracle mysql sqlserver db2 Postgresql Sqlite access sqlserver 微软db2 ibm================ ...
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- SpringBoot整合Mybatis-plus实现增删查改
今天给大家分享一下SpringBoot整合Mybatis-plus的增删查改案例. pom.xml <?xml version="1.0" encoding="UT ...
随机推荐
- Python成长笔记 - 基础篇 (十)
本节内容 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Queu ...
- 决策树 -- C4.5算法
C4.5是另一个分类决策树算法,是基于ID3算法的改进,改进点如下: 1.分离信息 解释:数据集通过条件属性A的分离信息,其实和ID3中的熵: 2.信息增益率 解释:Gain(A)为获的A ...
- JavaScript 鼠标划过 播放音乐。
'<EMBED style="FILTER: xray()" src="mp3/'+s+'" width=360 height=30 type=audio ...
- Java jstatd详解
jstatd 命令全称: Virtual Machine jstat Daemon DESCRIPTION The jstatd tool is an RMI server application ...
- Emberjs之Observer
Observer Person.reopen({ fullNameChanged: Ember.observer('fullName', function() { // deal with the c ...
- 我的ORM之四--删除
我的ORM索引 删除语法 var 影响行数 = dbr.表.Delete(条件).Execute(); 问题 1.如果没有Where条件,同样会报错.
- 一个App完成入门篇(五)- 完成新闻页面
本节教程将介绍如何用DeviceOne简单而高效的完成一个新闻页面. 导入项目 数据模板分离MVVM模型 自定义事件 展示新闻 九宫格展示 将要学习的demo效果图如下所示 1. 导入完整项目 本节示 ...
- XCode v8.11 重量级分表分库(无视海量数据)
XCode天生就有分表分库功能,设计于2005年!历时9年,这是分表分库功能第一次针对性正式更新. 在XCode里面,分表分库非常简单,在操作数据(查询/更新)前修改Meta.ConnName/Met ...
- js 把url参数转对象
//注意url中要含? function getParameterByName(name, url) { if (!url) { url = win ...
- XMPie部署与创建过程 - 快速指南
XMPie部署与创建过程 1PhotoShop.Indesign.VS2013关系.作用.使用 .1.1目的与过程 1. Photoshop负责导出cpkg文件. 1.1 动态性 如果你想要生成动态的 ...