SpringMVC 与oracle数据库的交互

来源:互联网 发布:近五年mpacc报考数据 编辑:程序博客网 时间:2024/06/10 22:12

一、使用JdbcTemplate连接数据库

     Spring org.springframework.jdbc.core 提供JDBC 板类,其中JdbcTemplatecore个包的核心类,其他模板类都是基于它封装完成的。JdbcTemplate主要提供以下四类方法

(1)execute方法
(2)updatebatchUpdate 方法
(3)queryqueryForXXX 方法     

注意: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
MybatisDAO 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中配置 sqlSessionFactorysqlSessionTemplate,还有其他的;

    <!-- 使用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
原创粉丝点击