SpringMVC 与oracle数据库的交互

一、使用 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文件中配置:

	
		
			org.springframework
			spring-jdbc
			4.3.1.RELEASE
		

		
			org.springframework.ws
			spring-oxm
			1.5.9
		
		

		
		
			org.mybatis
			mybatis
			3.2.8
		

		
			org.mybatis
			mybatis-spring
			1.2.2
		

		

		
			com.oracle
			ojdbc14
			10.2.0.4.0
		


		
		
			org.apache.tomcat
			tomcat-jdbc
			8.0.32
			runtime
		

(3)在src/main/resources下配置文件

  SpringMVC 与oracle数据库的交互_第1张图片

   jdbc.properties文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test_db?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&allowMultiQueries=true
jdbc.username=root
jdbc.password=root

jdbc.driver.ora=oracle.jdbc.driver.OracleDriver
jdbc.url.ora=jdbc:oracle:thin:@127.0.0.1:1521:HLX
jdbc.username.ora=scott
jdbc.password.ora=hsx

#connection pool settings
jdbc.pool.maxIdle=20
jdbc.pool.maxActive=190

 applicationContext.xml 中配置 dataSource

  
    
        
        
        
        
        

        
        
        
        
        
    
    
    
    
    	
    

    
    
        
    

 applicationContext.xml 中配置 sqlSessionFactorysqlSessionTemplate,还有其他的;

    
    
        
    


    
    
        
        
         
        
        
        
    
    
    
       
       
    

    
    
        
    

    
    
        
    
    
    

config.xml配置文件( Mybatis 局的环境配置





  
	
       
       
		
		
		
		
		
	

userinfoMapper.xml配置文件






	
	

  
	
	
	
	
	 
	 
	   select seq_uid.currval as id from dual
	 
	  insert into userinfos(id,uname, upass) values(seq_uid.nextval,#{uname}, #{upass})
	

	

    
	
		DELETE from userinfos where id=#{id}
	

	

 

(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 all(); // 查询所有的数据

}

(5)Service接口

public interface UserinfoService {
	void addUserinfo(String name, String pwd); // 添加用户

	void delUserinfo(Integer id); // 删除用户

	Userinfo getUserinfoById(Integer id); // 根据用户ID来查询数据

	List all(); // 查询所有的数据
	
	
	//使用MyBatis------------------------------------------
	void addUserinfoMyBatis(String name, String pwd); // 添加用户

	void delUserinfoMyBatis(Integer id); // 删除用户

	Userinfo getUserinfoByIdMyBatis(Integer id); // 根据用户ID来查询数据

	List allMyBatis(); // 查询所有的数据
	//------------------------------------------
}

(6)实现Service接口类

/**
 * 实现业务
 * 
 * @author Administrator
 * 
 */
@Service
public class UserinfoServiceImpl implements UserinfoService {

	// 注入jdbcTemplate
	@Resource
	JdbcTemplate jdbcTemplate;

	/**
	 * 添加,事务管理
	 */
	@Transactional
	@Override
	public 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() {
			@Override
			public 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
	@Override
	public void delUserinfo(Integer id) {
		// TODO Auto-generated method stub
		String sql="delete from userinfos where id=?";
		jdbcTemplate.update(sql, id);

	}

	@Override
	public Userinfo getUserinfoById(Integer id) {
		// TODO Auto-generated method stub
		String sql="select * from userinfos where id=?";
		
		//实体对象
		final Userinfo user= new Userinfo();
		
		//查询
		jdbcTemplate.query(sql, new Object[]{id}, new RowCallbackHandler() {
			
			@Override
			public void processRow(ResultSet rs) throws SQLException {
				// TODO Auto-generated method stub
				user.setUname(rs.getString("uname"));
				user.setUpass(rs.getString("upass"));
			}
			
		
		});
		
		//设置ID
		user.setId(id);
		
		return user;
	}

	@Override
	public List all() {
		// TODO Auto-generated method stub
		String sql ="select  * from userinfos";
		
		final List lists = new ArrayList();
		
		jdbcTemplate.query(sql, new RowCallbackHandler() {
			
			@Override
			public void processRow(ResultSet rs) throws SQLException {
				// TODO Auto-generated method stub
				Userinfo user= new Userinfo();
				user.setUname(rs.getString("uname"));
				user.setUpass(rs.getString("upass"));
				user.setId(rs.getInt("id"));
				
				//添加到集合中
				lists.add(user);
			}
		});
		
		return lists;
	}
/////////////////////mybatis///////////////////////////////////////
	//注入接口
	@Resource
	UserinfoDao userinfoDao;
	
	
	@Transactional
	@Override
	public void addUserinfoMyBatis(String name, String pwd) {
		// TODO Auto-generated method stub
		Userinfo user=new Userinfo();
		user.setUname(name);
		user.setUpass(pwd);
		userinfoDao.save(user);
	}
	
	@Transactional
	@Override
	public void delUserinfoMyBatis(Integer id) {
		// TODO Auto-generated method stub
		userinfoDao.delUserinfo(id);
	}

	@Override
	public Userinfo getUserinfoByIdMyBatis(Integer id) {
		// TODO Auto-generated method stub
		return userinfoDao.selectById(id);
	}

	@Override
	public List allMyBatis() {
		// TODO Auto-generated method stub
		return userinfoDao.all();
	}
}
整个工程

SpringMVC 与oracle数据库的交互_第2张图片

效果(一): JdbcTemplate连接数据库

 SpringMVC 与oracle数据库的交互_第3张图片

SpringMVC 与oracle数据库的交互_第4张图片

SpringMVC 与oracle数据库的交互_第5张图片

SpringMVC 与oracle数据库的交互_第6张图片

效果(二): Mybatis连接数据库

SpringMVC 与oracle数据库的交互_第7张图片

SpringMVC 与oracle数据库的交互_第8张图片

SpringMVC 与oracle数据库的交互_第9张图片

SpringMVC 与oracle数据库的交互_第10张图片


总结:

  1、使用SpringMVC+ JdbcTemplate操作Oracle数据库CRUD

  2、使用SpringMVC+ Mybatis操作Oracle数据库CRUD

 






你可能感兴趣的:(springmvc)