Spring笔记05(Spring JDBC三种数据源和ORM框架的映射)
1.ORM框架的映射
01.JDBC连接数据库以前的方式代码,并给对象赋值
- @Test
- /**
- * 以前的方式jdbc
- */
- public void TestJdbc(){
- /**
- * 连接数据库的四要素
- */
- String driver="com.mysql.jdbc.Driver";
- String url="jdbc:mysql://localhost:3306/spring";
- String username="root";
- String password="";
- /**
- * 创建jdbc需要的api
- */
- Connection connection=null;
- PreparedStatement pst=null;
- ResultSet rs=null;
- try {
- //01加载驱动
- Class.forName(driver);
- //02获取链接
- connection= DriverManager.getConnection(url, username, password);
- //03书写sql语句
- String sql="select sid,sname,age from student where sid=?";
- //04给参数赋值
- pst=connection.prepareStatement(sql);
- pst.setInt(,);
- //05获取查询结果
- rs=pst.executeQuery();
- while(rs.next()){
- Student student=new Student();
- student.setSid(rs.getInt("sid"));
- student.setAge(rs.getInt("age"));
- student.setSname(rs.getString("sname"));
- System.out.println(student);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }finally{
- try {
- rs.close();
- pst.close();
- connection.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
02.我们使用反射机制来 动态的给 Student对象赋值
- /**
- * 我们使用反射机制来 动态的给 Student对象赋值
- */
- public static void main(String[] args){
- /**
- * 连接数据库的四要素
- */
- String driver="com.mysql.jdbc.Driver";
- String url="jdbc:mysql://localhost:3306/spring";
- String username="root";
- String password="";
- /**
- * 创建jdbc需要的api
- */
- Connection connection=null;
- PreparedStatement pst=null;
- ResultSet rs=null;
- //创建需要映射的实体类
- Object student=null;
- try {
- student=Class.forName("cn.pb.bean.Student").newInstance();
- } catch (Exception e) {
- e.printStackTrace();
- }
- try {
- //01.加载驱动
- Class.forName(driver);
- //02.获取连接
- connection=DriverManager.getConnection(url,username,password);
- //03.书写sql语句
- String sql="select sid,age,sname from student where sid=?";
- //04.给参数赋值
- pst=connection.prepareStatement(sql);
- pst.setInt(,);
- //05.返回结果
- rs=pst.executeQuery();
- while (rs.next()){
- //获取元数据的结果集 元数据:描述数据的数据
- ResultSetMetaData metaData = rs.getMetaData();
- System.out.println("元数据"+metaData);
- int columnCount = metaData.getColumnCount();
- //遍历元数据集合
- for (int i=;i<=columnCount;i++){
- //获取数据库字段的名称
- String columnName = metaData.getColumnName(i);
- //获取数据库字段的类型 返回的类型都是大写
- String columnTypeName = metaData.getColumnTypeName(i);
- /**
- * 01.给我一个元数据的名称
- * 02.我去实体类中找对应的setXxx()
- */
- String method = getMethod(columnName);
- //赋值的时候根据类型
- if(columnTypeName.equals("INT")){
- student.getClass().getMethod(method,int.class).invoke(student,rs.getInt(columnName));
- }else if(columnTypeName.equals("VARCHAR")){
- student.getClass().getMethod(method,String.class).invoke(student,rs.getString(columnName));
- }
- }
- Student stu= (Student) student;
- System.out.println(stu);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }finally {
- try {
- rs.close();
- pst.close();
- connection.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- /**
- * 01.用户给我一个字段名称(数据库中)
- * 02.我们返回一个set+字段名 (首字母大写)
- * @param name 字段名称
- * @return 返回的set方法名称
- */
- public static String getMethod(String name){//传过来sid 返回 setSid
- return "set"+name.substring(,).toUpperCase()+name.substring();
- }
2.Spring的JDBC:
01.实体类代码:
- package cn.pb.bean;
- /**
- * student的实体类
- */
- public class Student {
- private int sid;
- private int age;
- private String sname;
- public Student(int sid, int age, String sname) {
- this.sid = sid;
- this.age = age;
- this.sname = sname;
- }
- public Student(int age, String sname) {
- this.age = age;
- this.sname = sname;
- }
- public Student() {
- }
- public int getSid() {
- return sid;
- }
- public void setSid(int sid) {
- this.sid = sid;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getSname() {
- return sname;
- }
- public void setSname(String sname) {
- this.sname = sname;
- }
- @Override
- public String toString() {
- return "Student{" +
- "sid=" + sid +
- ", age=" + age +
- ", sname='" + sname + '\'' +
- '}';
- }
- }
02.dao层代码:
001.dao层代码
- package cn.pb.dao;
- import cn.pb.bean.Student;
- import java.util.List;
- public interface StudentDao {
- int addStudent(Student student);
- int delStudent(Student student);
- int updateStudent(Student student);
- List<Student> findAllStudents();
- }
002.daoImpl层代码
- package cn.pb.dao.impl;
- import cn.pb.bean.Student;
- import cn.pb.dao.StudentDao;
- import org.springframework.jdbc.core.RowMapper;
- import org.springframework.jdbc.core.support.JdbcDaoSupport;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.util.List;
- /**
- * Spring 有一个类叫 JdbcDaoSupport ===>BaseDao
- * JdbcDaoSupport有一个属性叫JdbcTemplate
- * 在创建JdbcTemplate的时候 需要一个DataSource
- *
- * 我们只需要在配置文件中 配置数据源 即可!
- *
- */
- public class StudentDaoImpl extends JdbcDaoSupport implements StudentDao {
- public int addStudent(Student student) {
- String sql="insert into student(sname,age) values(?,?)";
- return getJdbcTemplate().update(sql,student.getSname(),student.getAge());
- }
- public int delStudent(Student student) {
- String sql="delete from student where sid=?";
- return getJdbcTemplate().update(sql,student.getSid());
- }
- public int updateStudent(Student student) {
- String sql="update student set sname=?,age=? where sid=?";
- return getJdbcTemplate().update(sql,student.getSname(),student.getAge(),student.getSid());
- }
- /**
- * @return 行映射器 rowMapper
- */
- public List<Student> findAllStudents() {
- String sql="select * from student";
- return getJdbcTemplate().query(sql, new StudentRowMapper() {
- });
- }
- }
行映射器代码:
- package cn.pb.dao.impl;
- import cn.pb.bean.Student;
- import org.springframework.jdbc.core.RowMapper;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- public class StudentRowMapper implements RowMapper<Student> {
- /**
- *
- * @param resultSet 之前叫 返回数据的结果集,是所有数据
- * 现在 这个不是所有,是一行数据的结果集
- */
- public Student mapRow(ResultSet resultSet, int i) throws SQLException {
- Student student=new Student();
- student.setSid(resultSet.getInt("sid"));
- student.setSname(resultSet.getString("sname"));
- student.setAge(resultSet.getInt("age"));
- return student;
- }
- }
03.service层代码:
001.service层代码:
- package cn.pb.service;
- import cn.pb.bean.Student;
- import java.util.List;
- public interface StudentService {
- int addStudent(Student student);
- int delStudent(Student student);
- int updateStudent(Student student);
- List<Student> findAllStudents();
- }
002.serviceImpl层代码
- package cn.pb.service.impl;
- import cn.pb.bean.Student;
- import cn.pb.dao.StudentDao;
- import cn.pb.service.StudentService;
- import java.util.List;
- public class StudentServiceImpl implements StudentService {
- private StudentDao dao;
- public int addStudent(Student student) {
- return dao.addStudent(student);
- }
- public int delStudent(Student student) {
- return dao.delStudent(student);
- }
- public int updateStudent(Student student) {
- return dao.updateStudent(student);
- }
- public List<Student> findAllStudents() {
- return dao.findAllStudents();
- }
- public StudentDao getDao() {
- return dao;
- }
- public void setDao(StudentDao dao) {
- this.dao = dao;
- }
- }
04.连接数据库的properties文件:jdbc.properties
- jdbc.driverClass=com.mysql.jdbc.Driver
- jdbc.jdbcUrl=jdbc:mysql://localhost:3306/spring
- jdbc.userName=root
- jdbc.password=
05.applicationContext.xml文件:
- <?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:p="http://www.springframework.org/schema/p"
- xmlns:c="http://www.springframework.org/schema/c"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context.xsd">
- <!--01.加载jdbc.properties文件-->
- <context:property-placeholder location="classpath:jdbc.properties"/>
- <!--02.配置数据源-->
- <!--001.使用spring默认的数据源
- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
- <property name="driverClassName" value="${jdbc.driverClass}"/>
- <property name="url" value="${jdbc.jdbcUrl}"/>
- <property name="username" value="${jdbc.userName}"/>
- <property name="password" value="${jdbc.password}"/>
- </bean>-->
- <!--002.使用c3p0数据源
- <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
- <property name="driverClass" value="${jdbc.driverClass}"/>
- <property name="jdbcUrl" value="${jdbc.jdbcUrl}"/>
- <property name="user" value="${jdbc.userName}"/>
- <property name="password" value="${jdbc.password}"/>
- </bean>-->
- <!--003.使用dbcp数据源-->
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName" value="${jdbc.driverClass}"/>
- <property name="url" value="${jdbc.jdbcUrl}"/>
- <property name="username" value="${jdbc.userName}"/>
- <property name="password" value="${jdbc.password}"/>
- </bean>
- <!--03.配置dao 在StudentDaoImpl里要使用数据源-->
- <bean id="studentDaoImpl" class="cn.pb.dao.impl.StudentDaoImpl">
- <property name="dataSource" ref="dataSource"/>
- </bean>
- <!--04.配置service-->
- <bean id="studentServiceImpl" class="cn.pb.service.impl.StudentServiceImpl">
- <property name="dao" ref="studentDaoImpl"/>
- </bean>
- </beans>
06.测试代码:
- package cn.pb;
- import cn.pb.bean.Student;
- import cn.pb.service.StudentService;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import java.util.List;
- public class TestJdbc {
- public static void main(String[] args) {
- ApplicationContext context=new
- ClassPathXmlApplicationContext("applicationContext.xml");
- StudentService service= (StudentService) context.getBean("studentServiceImpl");
- //service.addStudent(new Student(25,"xixi"));
- List<Student> list=service.findAllStudents();
- System.out.println(list);
- }
- }
Spring笔记05(Spring JDBC三种数据源和ORM框架的映射)的更多相关文章
- 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比
[原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...
- spring对事务支持的三种形式
spring对事务支持的三种形式: 1.通过spring配置文件进行切面配置 <bean id="***Manager" class="org.springfram ...
- Spring Boot应用启动的三种方式
Spring Boot应用HelloWorld的三种启动方式: 项目的创建可以在http://start.spring.io/网站中进行项目的创建. 首先项目结构: 1. 通过main方法的形式启动 ...
- JSON三种数据解析方法(转)
原 JSON三种数据解析方法 2018年01月15日 13:05:01 zhoujiang2012 阅读数:7896 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...
- Excel应该这么玩——5、三种数据:Excel也是系统
Excel最常用的功能就是记录数据,把数据按照行列记录下来.这部分数据是源数据,是业务活动中最原始的流水账,作为后续操作的依据.为了从源数据中得出一定的结论,需要对源数据进行分析得出报表数据. ...
- Hibernate中的三种数据状态
Hibernate中的三种数据状态(临时.持久.游离) 1.临时态(瞬时态) 不存在于session中,也不存在于数据库中的数据,被称为临时态. 比如:刚刚使用new关键字创建出的对象. 2.持久态 ...
- Docker 数据管理-三种数据mount方式
可以在Container可写层存储数据,但是有三个缺点: 当Container销毁时,数据不能持久保存. Container的可写层和Container所在的主机紧耦合,不容易将数据移动到其他地方. ...
- 浅谈Hibernate中的三种数据状态
Hibernate中的三种数据状态:临时.持久.游离 1.临时态(瞬时态) 不存在于session中,也不存在于数据库中的数据,被称为临时态. 数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器 ...
- Linux 双线策略路由的三种实现方式总结+端口映射
Linux 双线策略路由的三种实现方式总结+端口映射 Linux 双线策略路由的三种实现方式总结+端口映射 网络环境 服务器(网关): eth0 为LAN口,IP为 LAN_IP = 192.168. ...
随机推荐
- 转:PCIe基础知识
PCIe基础知识 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zqixiao_09/article/details/51842542 PCIe ...
- PHP下最好用的富文本HTML过滤器:HTMLPurifier使用教程
HTMLPurifier是我目前用过最好的PHP富文本HTML过滤器了,采用了白名单机制,有效杜绝了用户提交表单中的非法HTML标签,从而可以防止XSS攻击! HTMLPurifier项目地址:htt ...
- pooler 连接池中报错" error_no_members"
连接池驱动,pooler 在使用中会报错" error_no_members" 分析:可能有以下3个地方对其有影响: 1)member 可能没回收: 2)wait_for_p ...
- linux下安装go
在centOS下,安装go的环境,如下: 下载压缩包,wget https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz 解压该文件 ...
- 关于ejabberd限制单点登录
ejabberd 是对xmpp协议的完全实现,那么单纯的ejabberd是不提供该功能限制的,但是从我们的xmpp协议则可以完全的解决这个问题,我们通过jid对它进行限制,下面可以看一下jid的解释: ...
- 查看并修改Linux主机名命令hostname
查看主机名 hostname可以查看主机名 export也可以查看 修改主机名 echo new-hostname > /proc/sys/kernel/hostname (系统启动时,从此文件 ...
- tomcat端口问题
https://segmentfault.com/q/1010000008858162?_ea=1777730
- 高性能流媒体服务器EasyDSS前端重构(二) webpack + vue + AdminLTE 多页面提取共用文件, 优化编译时间
本文围绕着实现EasyDSS高性能流媒体服务器的前端框架来展开的,具体EasyDSS的相关信息可在:www.easydss.com 找到! 接上回 <高性能流媒体服务器EasyDSS前端重构(一 ...
- maven依赖本地非repository中的jar包【转】
今天在使用maven编译打包一个web应用的时候,碰到一个问题: 项目在开发是引入了依赖jar包,放在了WEB-INF/lib目录下,并通过buildpath中将web libariary导入. 在e ...
- vs2013工程技巧
1 vs工程输出了dll和lib,分别是什么,有什么用? 当设置工程property的Project Defaults的Configuration Type为dll时,不光会生成该动态链接库的dll文 ...