zoukankan      html  css  js  c++  java
  • Spring JDBC 数据访问

    Spring JDBC是Spring所提供的持久层技术,它的主要目标是降低使用JDBC API的门槛,以一种更直接,更简介,更
    简单的方式使用JDBC API, 在Spring JDBC里,仅需做那些与业务相关的DML操作,而将资源获取,Statment创建,
    资源释放以及异常处理等繁杂而乏味的工作交给Spring JDBC.
    虽然ORM的框架已经成熟丰富,但是JDBC的灵活,直接的特性,依然让他拥有自己的用武之地,如在完全依赖查询
    模型动态产生查询语句的综合查询系统中,Hibernaye,MyBatis,JPA等框架都无法使用,这里JDBC是唯一的选择.

    1. JdbcTemplate入门

    1.1 创建项目-引入jar包-导入日志:log4j.properties

    1.2 创建数据库
    数据库名: springjdbc
    创建角色表:

    1 CREATE TABLE `role` (
    2 `rid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '角色id',
    3 `rname` VARCHAR(20) NOT NULL COMMENT '角色名',
    4 `alias` VARCHAR(20) NOT NULL COMMENT '角色别名',
    5 PRIMARY KEY (`rid`)
    6 )
    7 INSERT INTO role (rid,rname,alias)
    8 VALUES(1,'admin','系统管理员'),(2,'dispatcher','调度员');

    1.3 测试代码

     1 @Test
     2 public void test1() throws Exception {
     3 //TODO 测试jdbcTemplate简单使用
     4 //1.创建c3p0链接池
     5 ComboPooledDataSource dataSource = new ComboPooledDataSource();
     6 dataSource.setDriverClass("com.mysql.jdbc.Driver");
     7 dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/springjdbc");
     8 dataSource.setUser("root");
     9 dataSource.setPassword("111");
    10 //创建jdbcTemplate对象
    11 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
    12 //创建sql语句
    13 String sql = "insert into role (rid , rname ,alias) value (? , ?,?);";
    14 jdbcTemplate.update(sql,"3","visitor","游客");
    15 }

    2. Spring管理JdbcTemplate

    1. 创建Role.java

    1 public class Role {
    2 private Integer cid;
    3 private String rname;
    4 private String alias;
    5 //setter getter
    6 }

    2. RoleDao.java

     1 public interface RoleDao {
     2 //
     3 void save(Role role);
     4 //删除
     5 void delete(Integer id);
     6 //
     7 void update(Role role);
     8 //
     9 Role getById(Integer id);
    10 //
    11 int getTotalCount();
    12 //
    13 List<Role> getAll();
    14 }

    3. 创建RoleDaoImpl.java

    创建数据源(连接池),JdbcTemplate,RoleDao交给Spring容器管理(IOC)
    注意: 可以自己在RoleDaoImpl中添加 JdbcTemplate变量,如果不自动装载记得添加变量的set方法,
    标准的操作,我们可以让RoleDaoImpl 继承 JdbcDaoSupport, 因为
    (org.springframework.jdbc.core.support.JdbcDaoSupport)类提供了JdbcTemplate对象以及对应的获取和设置方
    法.不用自己在实现类中添加JdbcTemplate变量!!

    JdbcTemplate // Spring操作数据模板类(工具类)
    JdbcTemplate.update(sql,ArgsObj....); //DML
    JdbcTemplate.execute(sql) //DDL DCL
    //DQL 查询单个
    jdbcTemplate.queryForObject(String var1, RowMapper<T> var2, Object... var3);
    RowWapper<T> 将结果封装的处理器; 得到Result解析成实体类对象即可!
    //查询所有
    jdbcTemplate.query(String var1, RowMapper<T> var2, Object... var3);

    RoleDaoImple代码:

     1 public class RoleDaoImpl extends JdbcDaoSupport implements RoleDao {
     2 public void save(Role role) {
     3 //TODO 插入数据
     4 String sql = "INSERT INTO role (rname,alias) value (?,?) ;";
     5 getJdbcTemplate().update(sql,role.getRname(),role.getAlias());
     6 }
     7 public void delete(Integer id) {
     8 //TODO 根据id删除
     9 String sql = "delete from role where rid = ? ;";
    10 getJdbcTemplate().update(sql,id);
    11 }
    12 public void update(Role role) {
    13 //TODO 修改role信息
    14 String sql="update role set rname = ? , alias = ? where rid = ? ;" ;
    15 getJdbcTemplate().update(sql,role.getRname(),role.getAlias(),role.getRid());
    16 }
    17 public Role getById(Integer id) {
    18 String sql = "select * from role where rid = ? ;";
    19 //直接查询
    20 // Role role = getJdbcTemplate().queryForObject(sql, new Object[]{id}, Role.class);
    21 Role role = (Role) getJdbcTemplate().queryForObject(sql, new Object[]{id}, new
    22 RowMapper<Object>() {
    23 public Object mapRow(ResultSet resultSet, int index) throws SQLException {
    24 //将一行数据解析成一个java对象
    25 return mapRowHandler(resultSet);
    26 }
    27 });
    28 return role;
    29 }
    30 public int getTotalCount() {
    31 String sql = "select count(*) from role ;";
    32 Integer count = getJdbcTemplate().queryForObject(sql,Integer.class);
    33 return count;
    34 }
    35 //查询所有
    36 public List<Role> getAll() {
    37 String sql = "select * from role";
    38 List<Role> list = getJdbcTemplate().query(sql, new RowMapper<Role>() {
    39 public Role mapRow(ResultSet resultSet, int i) throws SQLException {
    40 return mapRowHandler(resultSet);
    41 }
    42 });
    43 return list;
    44 }
    45 private Role mapRowHandler(ResultSet resultSet) throws SQLException{
    46 Role role = new Role();
    47 role.setRid(resultSet.getInt("rid"));
    48 role.setRname(resultSet.getString("rname"));
    49 role.setAlias(resultSet.getString("alias"));
    50 return role;
    51 }
    52 }
    View Code

    4. 创建数据库配置文件

    文件名:db.properties
    位置: src下/ maven项目 resources文件夹下

    jdbc.jdbcUrl=jdbc:mysql://localhost:3306/****
    jdbc.driverClass=com.mysql.jdbc.Driver
    jdbc.user=root
    jdbc.password=***

    5.编写IOC配置

    文件名:applicationContext.xml
    位置:src下 / maven项目 resources文件夹下

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4 xmlns:context="http://www.springframework.org/schema/context"
     5 xmlns:p="http://www.springframework.org/schema/p"
     6 xsi:schemaLocation="
     7 http://www.springframework.org/schema/beans
     8 http://www.springframework.org/schema/beans/spring-beans.xsd
     9 http://www.springframework.org/schema/context
    10 http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions
    11 here -->
    12 <context:component-scan base-package="com.itqf.spring"></context:component-scan>
    13 <context:property-placeholder location="db.properties"></context:property-
    14 placeholder>
    15 <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    16 p:jdbcUrl="${jdbc.jdbcUrl}"
    17 p:driverClass="${jdbc.driverClass}"
    18 p:user="root"
    19 p:password="111"
    20 />
    21 <!-- bean jdbcTemplate -->
    22 <bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    23 <property name="dataSource" ref="dataSource"/>
    24 </bean>
    25 <bean name="roleDao" class="com.itqf.spring.dao.impl.RoleDaoImpl">
    26 <property name="jdbcTemplate" ref="jdbcTemplate"/>
    27 </bean>
    28 </beans>

    测试:

     1 @Test
     2 public void test2(){
     3 //TODO 测试使用配置文件
     4 ApplicationContext context =new
     5 ClassPathXmlApplicationContext("applicationContext.xml");
     6 RoleDao dao = context.getBean("roleDao", RoleDaoImpl.class);
     7 Role byId = dao.getById(2);
     8 System.out.println(byId);
     9 List<Role> all = dao.getAll();
    10 System.out.println("all = " + all);
    11 }
  • 相关阅读:
    【LeetCode】两个有序数组合成一个有序数组(NEW)
    swiftmonkey 源码剖析及二次开发思路
    CentOS7 + Python3 + Django(rest_framework) + MySQL + nginx + uwsgi 部署 API 开发环境, 记坑篇
    Vue 5小时学习小教程
    【LeetCode】两数相加
    (vue.js)vue中引用了别的组件 ,如何使this指向Vue对象
    Monkey for Mac 环境配置
    [Vue] 初识Vue-常用指令
    利用Tkinter做的自动生成JSONSchema的小工具
    Linux下如何删除非空目录
  • 原文地址:https://www.cnblogs.com/sueyyyy/p/9277246.html
Copyright © 2011-2022 走看看