SpringMVC 与oracle数据库的交互
来源:互联网 发布:近五年mpacc报考数据 编辑:程序博客网 时间:2024/06/10 22:12
一、使用JdbcTemplate连接数据库
Spring 框架中org.springframework.jdbc.core 包提供了JDBC 模板类,其中JdbcTemplate是 core这个包的核心类,其他模板类都是基于它封装完成的。JdbcTemplate类主要提供以下四类方法:
(1)execute方法
(2)update方法及batchUpdate 方法
(3)query方法及queryForXXX 方法
注意:JdbcTemplate 的 query 方法,支持传入一个 Callback 接口:
(3-1)ResultSetExtractor:用于结果集数据提取,用户需实现方法 extractData 方法来处理结果集
**(3-2)RowCallbackHandler:用于处理 ResultSet 的每一行结果,用户需实现方法processRow 方法来完成处理,在该回调方法中无需执行 rs.next()
(3-3)RowMapper:用于将结果集每行数据转换为需要的类型,用户需实现方法 mapRow 方法来完成将每行数据转换为相应的类型
(4)call方法
二、使用Mybatis框架连接数据库
(1)Mybatis 优势:
•简单易学
•Mybatis不会对应用程序或者数据库的现有设计强加任何影响
•提供xml 标签,支持编写动态sql
•Mybatis实现了DAO 接口与xml 映射文件的绑定
(2)引入 Mybatis依赖包:
在pom.xml文件中配置:
<!-- spring start --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.3.1.RELEASE</version></dependency><dependency><groupId>org.springframework.ws</groupId><artifactId>spring-oxm</artifactId><version>1.5.9</version></dependency><!-- end --><!-- mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.2.8</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.2.2</version></dependency><!-- end --><dependency><groupId>com.oracle</groupId><artifactId>ojdbc14</artifactId><version>10.2.0.4.0</version></dependency><!-- connect pool --><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-jdbc</artifactId><version>8.0.32</version><scope>runtime</scope></dependency>
(3)在src/main/resources下配置文件
jdbc.properties文件
jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1:3306/test_db?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&allowMultiQueries=truejdbc.username=rootjdbc.password=rootjdbc.driver.ora=oracle.jdbc.driver.OracleDriverjdbc.url.ora=jdbc:oracle:thin:@127.0.0.1:1521:HLXjdbc.username.ora=scottjdbc.password.ora=hsx#connection pool settingsjdbc.pool.maxIdle=20jdbc.pool.maxActive=190
applicationContext.xml中配置 dataSource
<!-- 数据源配置, 使用Tomcat JDBC连接池 --> <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close"> <!-- Connection Info --> <property name="driverClassName" value="${jdbc.driver.ora}" /> <property name="url" value="${jdbc.url.ora}" /> <property name="username" value="${jdbc.username.ora}" /> <property name="password" value="${jdbc.password.ora}" /> <!-- Connection Pooling Info --> <property name="maxActive" value="${jdbc.pool.maxActive}" /> <property name="maxIdle" value="${jdbc.pool.maxIdle}" /> <property name="minIdle" value="0" /> <property name="defaultAutoCommit" value="false" /> </bean> <!-- 配置jdbcTemplate --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- production环境 --> <beans profile="production"> <context:property-placeholder ignore-unresolvable="true" file-encoding="utf-8" location="classpath:config.properties,classpath:jdbc.properties" /> </beans>
applicationContext.xml中配置 sqlSessionFactory和sqlSessionTemplate,还有其他的;
<!-- 使用annotation 自动注册bean, 并保证@Required、@Autowired的属性被注入 --> <context:component-scan base-package="com.hlx" use-default-filters="true"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> <!-- MyBatis配置 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 --> <property name="typeAliasesPackage" value="com.hlx.entity;" /> <!-- 多个路径用分号隔开 --> <!-- 显式指定Mapper文件位置 --> <property name="mapperLocations" value="classpath*:/mybatis/*Mapper.xml" /> <property name="configLocation" value="classpath:/mybatis/config.xml"/> </bean> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /> <constructor-arg index="1" value="BATCH" /> </bean> <!-- 扫描basePackage接口 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.hlx.dao" /> </bean> <!-- 使用annotation定义事务 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 事务注解类生效 --> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
config.xml配置文件(Mybatis 全局的环境配置)
<?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> <!--mybatis的全局配置 --><settings> <setting name="cacheEnabled" value="true" /><setting name="lazyLoadingEnabled" value="false" /><setting name="useColumnLabel" value="true" /><setting name="useGeneratedKeys" value="true" /><setting name="defaultExecutorType" value="SIMPLE" /><setting name="localCacheScope" value="STATEMENT"/></settings></configuration>
userinfoMapper.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"><!-- namespace必须指向Dao接口 --><mapper namespace="com.hlx.dao.UserinfoDao"><!-- 开通缓存 --><cache eviction="FIFO" flushInterval="60000" size="500" readOnly="true"></cache> <!-- mysql自动生成主键 --><!-- <insert id="save" parameterType="Userinfo" useGeneratedKeys="true"keyProperty="id" flushCache="true">insert into userinfos(uname, upass)values(#{uname}, #{upass})</insert> --><!-- 注意id="save"与DAO接口中的方法名相同哦! --><insert id="save" parameterType="Userinfo"> <!-- 获取Oracle中自动增长 --> <selectKey resultType="java.lang.Integer" keyProperty="id" order="AFTER"> select seq_uid.currval as id from dual </selectKey> insert into userinfos(id,uname, upass) values(seq_uid.nextval,#{uname}, #{upass})</insert><select id="selectById" parameterType="int" resultType="Userinfo"useCache="false">select * from userinfos where id=#{id}</select> <!-- 删除之后刷新 flushCache="true"--><delete id="delUserinfo" parameterType="int" flushCache="true">DELETE from userinfos where id=#{id}</delete><select id="all" resultType="Userinfo">select * from userinfos</select></mapper>
(4)Entity实体类省略;Dao接口
package com.hlx.dao;import java.util.List;import com.hlx.entity.Userinfo;public interface UserinfoDao {void save(Userinfo user);Userinfo selectById(Integer id);void delUserinfo(Integer id); // 删除用户List<Userinfo> all(); // 查询所有的数据}
(5)Service接口
public interface UserinfoService {void addUserinfo(String name, String pwd); // 添加用户void delUserinfo(Integer id); // 删除用户Userinfo getUserinfoById(Integer id); // 根据用户ID来查询数据List<Userinfo> all(); // 查询所有的数据//使用MyBatis------------------------------------------void addUserinfoMyBatis(String name, String pwd); // 添加用户void delUserinfoMyBatis(Integer id); // 删除用户Userinfo getUserinfoByIdMyBatis(Integer id); // 根据用户ID来查询数据List<Userinfo> allMyBatis(); // 查询所有的数据//------------------------------------------}
(6)实现Service接口类
/** * 实现业务 * * @author Administrator * */@Servicepublic class UserinfoServiceImpl implements UserinfoService {// 注入jdbcTemplate@ResourceJdbcTemplate jdbcTemplate;/** * 添加,事务管理 */@Transactional@Overridepublic void addUserinfo(final String name, final String pwd) {//支持seq_uid.nextval (oracle自动序列化)final String sql = "insert into userinfos(id,uname,upass) values(seq_uid.nextval,?,?)";// 保存生成后的PK ===>Mysql支持 (oracle不支持)//KeyHolder key = new GeneratedKeyHolder();jdbcTemplate.update(new PreparedStatementCreator() {@Overridepublic PreparedStatement createPreparedStatement(Connection arg0)throws SQLException {PreparedStatement ps = arg0.prepareStatement(sql);ps.setString(1, name);ps.setString(2, pwd);return ps;}});// 输出key//System.out.println("key=" + key.getKey().intValue());}/** * 删除,事务管理 */@Transactional@Overridepublic void delUserinfo(Integer id) {// TODO Auto-generated method stubString sql="delete from userinfos where id=?";jdbcTemplate.update(sql, id);}@Overridepublic Userinfo getUserinfoById(Integer id) {// TODO Auto-generated method stubString sql="select * from userinfos where id=?";//实体对象final Userinfo user= new Userinfo();//查询jdbcTemplate.query(sql, new Object[]{id}, new RowCallbackHandler() {@Overridepublic void processRow(ResultSet rs) throws SQLException {// TODO Auto-generated method stubuser.setUname(rs.getString("uname"));user.setUpass(rs.getString("upass"));}});//设置IDuser.setId(id);return user;}@Overridepublic List<Userinfo> all() {// TODO Auto-generated method stubString sql ="select * from userinfos";final List<Userinfo> lists = new ArrayList<Userinfo>();jdbcTemplate.query(sql, new RowCallbackHandler() {@Overridepublic void processRow(ResultSet rs) throws SQLException {// TODO Auto-generated method stubUserinfo user= new Userinfo();user.setUname(rs.getString("uname"));user.setUpass(rs.getString("upass"));user.setId(rs.getInt("id"));//添加到集合中lists.add(user);}});return lists;}/////////////////////mybatis/////////////////////////////////////////注入接口@ResourceUserinfoDao userinfoDao;@Transactional@Overridepublic void addUserinfoMyBatis(String name, String pwd) {// TODO Auto-generated method stubUserinfo user=new Userinfo();user.setUname(name);user.setUpass(pwd);userinfoDao.save(user);}@Transactional@Overridepublic void delUserinfoMyBatis(Integer id) {// TODO Auto-generated method stubuserinfoDao.delUserinfo(id);}@Overridepublic Userinfo getUserinfoByIdMyBatis(Integer id) {// TODO Auto-generated method stubreturn userinfoDao.selectById(id);}@Overridepublic List<Userinfo> allMyBatis() {// TODO Auto-generated method stubreturn userinfoDao.all();}}整个工程
效果(一): JdbcTemplate连接数据库
效果(二): Mybatis连接数据库
总结:
1、使用SpringMVC+ JdbcTemplate操作Oracle数据库CRUD
2、使用SpringMVC+ Mybatis操作Oracle数据库CRUD
0 0
- SpringMVC 与oracle数据库的交互
- SpringMVC与底层数据库的交互
- C++与Oracle数据库的交互
- 【JSP】JSP与oracle数据库交互案例
- Python与Oracle数据库交互异常处理
- jquery的ajax请求与springMVC交互
- SpringMVC与json数据的交互
- XML与数据库的交互
- EA与数据库的交互
- hibernateTemplate与数据库的交互
- 数据库与python的交互
- 【SpringMVC学习09】SpringMVC与前台的json数据交互
- 【SpringMVC学习09】SpringMVC与前台的json数据交互
- 【SpringMVC学习09】SpringMVC与前台的json数据交互
- 【SpringMVC学习09】SpringMVC与前台的json数据交互
- 【SpringMVC学习07】SpringMVC与前台的json数据交互
- Ajax与SpringMvc交互
- springmvc与Ajax交互
- 【机器学习】贝叶斯决策论小结
- python报错: Python.h: 没有那个文件或目录
- 用C#写的小工具,可以将当前文件夹及其子文件夹内的所有文本文件转换为utf-8编码格式。
- POJ1125
- Eclipse安装Spring IDE,Hibernate Tool
- SpringMVC 与oracle数据库的交互
- 51nod 1278
- 前端学习入门书籍
- SVN服务器搭建和使用
- MySQL命令行导入sql数据库
- POJ 1195 Mobile phones (二维树状数组)
- c#.net常用字符串函数(笔记)
- 虚拟机上Rathat6.3安装MySQL-5.6.16-1.rhel5.x86_64.rpm-bundle教程
- Java中的NULL