1.ORM框架的映射

01.JDBC连接数据库以前的方式代码,并给对象赋值

  1. @Test
  2. /**
  3. * 以前的方式jdbc
  4. */
  5. public void TestJdbc(){
  6. /**
  7. * 连接数据库的四要素
  8. */
  9. String driver="com.mysql.jdbc.Driver";
  10. String url="jdbc:mysql://localhost:3306/spring";
  11. String username="root";
  12. String password="";
  13. /**
  14. * 创建jdbc需要的api
  15. */
  16. Connection connection=null;
  17. PreparedStatement pst=null;
  18. ResultSet rs=null;
  19.  
  20. try {
  21. //01加载驱动
  22. Class.forName(driver);
  23. //02获取链接
  24. connection= DriverManager.getConnection(url, username, password);
  25. //03书写sql语句
  26. String sql="select sid,sname,age from student where sid=?";
  27. //04给参数赋值
  28. pst=connection.prepareStatement(sql);
  29. pst.setInt(,);
  30. //05获取查询结果
  31. rs=pst.executeQuery();
  32.  
  33. while(rs.next()){
  34. Student student=new Student();
  35. student.setSid(rs.getInt("sid"));
  36. student.setAge(rs.getInt("age"));
  37. student.setSname(rs.getString("sname"));
  38. System.out.println(student);
  39. }
  40.  
  41. } catch (Exception e) {
  42. e.printStackTrace();
  43. }finally{
  44. try {
  45. rs.close();
  46. pst.close();
  47. connection.close();
  48. } catch (SQLException e) {
  49. e.printStackTrace();
  50. }
  51. }
  52.  
  53. }

02.我们使用反射机制来 动态的给 Student对象赋值

  1. /**
  2. * 我们使用反射机制来 动态的给 Student对象赋值
  3. */
  4. public static void main(String[] args){
  5. /**
  6. * 连接数据库的四要素
  7. */
  8. String driver="com.mysql.jdbc.Driver";
  9. String url="jdbc:mysql://localhost:3306/spring";
  10. String username="root";
  11. String password="";
  12.  
  13. /**
  14. * 创建jdbc需要的api
  15. */
  16. Connection connection=null;
  17. PreparedStatement pst=null;
  18. ResultSet rs=null;
  19.  
  20. //创建需要映射的实体类
  21. Object student=null;
  22. try {
  23. student=Class.forName("cn.pb.bean.Student").newInstance();
  24. } catch (Exception e) {
  25. e.printStackTrace();
  26. }
  27.  
  28. try {
  29. //01.加载驱动
  30. Class.forName(driver);
  31. //02.获取连接
  32. connection=DriverManager.getConnection(url,username,password);
  33. //03.书写sql语句
  34. String sql="select sid,age,sname from student where sid=?";
  35. //04.给参数赋值
  36. pst=connection.prepareStatement(sql);
  37. pst.setInt(,);
  38. //05.返回结果
  39. rs=pst.executeQuery();
  40.  
  41. while (rs.next()){
  42. //获取元数据的结果集 元数据:描述数据的数据
  43. ResultSetMetaData metaData = rs.getMetaData();
  44. System.out.println("元数据"+metaData);
  45. int columnCount = metaData.getColumnCount();
  46. //遍历元数据集合
  47. for (int i=;i<=columnCount;i++){
  48. //获取数据库字段的名称
  49. String columnName = metaData.getColumnName(i);
  50. //获取数据库字段的类型 返回的类型都是大写
  51. String columnTypeName = metaData.getColumnTypeName(i);
  52.  
  53. /**
  54. * 01.给我一个元数据的名称
  55. * 02.我去实体类中找对应的setXxx()
  56. */
  57. String method = getMethod(columnName);
  58. //赋值的时候根据类型
  59. if(columnTypeName.equals("INT")){
  60. student.getClass().getMethod(method,int.class).invoke(student,rs.getInt(columnName));
  61. }else if(columnTypeName.equals("VARCHAR")){
  62. student.getClass().getMethod(method,String.class).invoke(student,rs.getString(columnName));
  63. }
  64.  
  65. }
  66.  
  67. Student stu= (Student) student;
  68. System.out.println(stu);
  69. }
  70.  
  71. } catch (Exception e) {
  72. e.printStackTrace();
  73. }finally {
  74. try {
  75. rs.close();
  76. pst.close();
  77. connection.close();
  78. } catch (SQLException e) {
  79. e.printStackTrace();
  80. }
  81. }
  82.  
  83. }
  84.  
  85. /**
  86. * 01.用户给我一个字段名称(数据库中)
  87. * 02.我们返回一个set+字段名 (首字母大写)
  88. * @param name 字段名称
  89. * @return 返回的set方法名称
  90. */
  91. public static String getMethod(String name){//传过来sid 返回 setSid
  92.  
  93. return "set"+name.substring(,).toUpperCase()+name.substring();
  94. }

2.Spring的JDBC:

01.实体类代码:

  1. package cn.pb.bean;
  2.  
  3. /**
  4. * student的实体类
  5. */
  6. public class Student {
  7.  
  8. private int sid;
  9. private int age;
  10. private String sname;
  11.  
  12. public Student(int sid, int age, String sname) {
  13. this.sid = sid;
  14. this.age = age;
  15. this.sname = sname;
  16. }
  17.  
  18. public Student(int age, String sname) {
  19. this.age = age;
  20. this.sname = sname;
  21. }
  22.  
  23. public Student() {
  24.  
  25. }
  26.  
  27. public int getSid() {
  28. return sid;
  29. }
  30.  
  31. public void setSid(int sid) {
  32. this.sid = sid;
  33. }
  34.  
  35. public int getAge() {
  36. return age;
  37. }
  38.  
  39. public void setAge(int age) {
  40. this.age = age;
  41. }
  42.  
  43. public String getSname() {
  44. return sname;
  45. }
  46.  
  47. public void setSname(String sname) {
  48. this.sname = sname;
  49. }
  50.  
  51. @Override
  52. public String toString() {
  53. return "Student{" +
  54. "sid=" + sid +
  55. ", age=" + age +
  56. ", sname='" + sname + '\'' +
  57. '}';
  58. }
  59. }

02.dao层代码:

001.dao层代码

  1. package cn.pb.dao;
  2.  
  3. import cn.pb.bean.Student;
  4.  
  5. import java.util.List;
  6.  
  7. public interface StudentDao {
  8. int addStudent(Student student);
  9. int delStudent(Student student);
  10. int updateStudent(Student student);
  11. List<Student> findAllStudents();
  12. }

002.daoImpl层代码

  1. package cn.pb.dao.impl;
  2.  
  3. import cn.pb.bean.Student;
  4. import cn.pb.dao.StudentDao;
  5. import org.springframework.jdbc.core.RowMapper;
  6. import org.springframework.jdbc.core.support.JdbcDaoSupport;
  7.  
  8. import java.sql.ResultSet;
  9. import java.sql.SQLException;
  10. import java.util.List;
  11. /**
  12. * Spring 有一个类叫 JdbcDaoSupport ===>BaseDao
  13. * JdbcDaoSupport有一个属性叫JdbcTemplate
  14. * 在创建JdbcTemplate的时候 需要一个DataSource
  15. *
  16. * 我们只需要在配置文件中 配置数据源 即可!
  17. *
  18. */
  19. public class StudentDaoImpl extends JdbcDaoSupport implements StudentDao {
  20.  
  21. public int addStudent(Student student) {
  22. String sql="insert into student(sname,age) values(?,?)";
  23. return getJdbcTemplate().update(sql,student.getSname(),student.getAge());
  24. }
  25.  
  26. public int delStudent(Student student) {
  27. String sql="delete from student where sid=?";
  28. return getJdbcTemplate().update(sql,student.getSid());
  29. }
  30.  
  31. public int updateStudent(Student student) {
  32. String sql="update student set sname=?,age=? where sid=?";
  33. return getJdbcTemplate().update(sql,student.getSname(),student.getAge(),student.getSid());
  34. }
  35. /**
  36. * @return 行映射器 rowMapper
  37. */
  38. public List<Student> findAllStudents() {
  39. String sql="select * from student";
  40. return getJdbcTemplate().query(sql, new StudentRowMapper() {
  41.  
  42. });
  43. }
  44. }

行映射器代码:

  1. package cn.pb.dao.impl;
  2.  
  3. import cn.pb.bean.Student;
  4. import org.springframework.jdbc.core.RowMapper;
  5.  
  6. import java.sql.ResultSet;
  7. import java.sql.SQLException;
  8.  
  9. public class StudentRowMapper implements RowMapper<Student> {
  10. /**
  11. *
  12. * @param resultSet 之前叫 返回数据的结果集,是所有数据
  13. * 现在 这个不是所有,是一行数据的结果集
  14. */
  15. public Student mapRow(ResultSet resultSet, int i) throws SQLException {
  16. Student student=new Student();
  17. student.setSid(resultSet.getInt("sid"));
  18. student.setSname(resultSet.getString("sname"));
  19. student.setAge(resultSet.getInt("age"));
  20. return student;
  21. }
  22. }

03.service层代码:

001.service层代码:

  1. package cn.pb.service;
  2.  
  3. import cn.pb.bean.Student;
  4.  
  5. import java.util.List;
  6.  
  7. public interface StudentService {
  8. int addStudent(Student student);
  9. int delStudent(Student student);
  10. int updateStudent(Student student);
  11. List<Student> findAllStudents();
  12.  
  13. }

002.serviceImpl层代码

  1. package cn.pb.service.impl;
  2.  
  3. import cn.pb.bean.Student;
  4. import cn.pb.dao.StudentDao;
  5. import cn.pb.service.StudentService;
  6.  
  7. import java.util.List;
  8.  
  9. public class StudentServiceImpl implements StudentService {
  10. private StudentDao dao;
  11.  
  12. public int addStudent(Student student) {
  13. return dao.addStudent(student);
  14. }
  15.  
  16. public int delStudent(Student student) {
  17. return dao.delStudent(student);
  18. }
  19.  
  20. public int updateStudent(Student student) {
  21. return dao.updateStudent(student);
  22. }
  23.  
  24. public List<Student> findAllStudents() {
  25. return dao.findAllStudents();
  26. }
  27.  
  28. public StudentDao getDao() {
  29. return dao;
  30. }
  31.  
  32. public void setDao(StudentDao dao) {
  33. this.dao = dao;
  34. }
  35. }

04.连接数据库的properties文件:jdbc.properties

  1. jdbc.driverClass=com.mysql.jdbc.Driver
  2. jdbc.jdbcUrl=jdbc:mysql://localhost:3306/spring
  3. jdbc.userName=root
  4. jdbc.password=

05.applicationContext.xml文件:

  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:p="http://www.springframework.org/schema/p"
  5. xmlns:c="http://www.springframework.org/schema/c"
  6. xmlns:context="http://www.springframework.org/schema/context"
  7. xsi:schemaLocation="
  8. http://www.springframework.org/schema/beans
  9. http://www.springframework.org/schema/beans/spring-beans.xsd
  10. http://www.springframework.org/schema/context
  11. http://www.springframework.org/schema/context/spring-context.xsd">
  12.  
  13. <!--01.加载jdbc.properties文件-->
  14. <context:property-placeholder location="classpath:jdbc.properties"/>
  15.  
  16. <!--02.配置数据源-->
  17. <!--001.使用spring默认的数据源
  18. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  19. <property name="driverClassName" value="${jdbc.driverClass}"/>
  20. <property name="url" value="${jdbc.jdbcUrl}"/>
  21. <property name="username" value="${jdbc.userName}"/>
  22. <property name="password" value="${jdbc.password}"/>
  23. </bean>-->
  24. <!--002.使用c3p0数据源
  25. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  26. <property name="driverClass" value="${jdbc.driverClass}"/>
  27. <property name="jdbcUrl" value="${jdbc.jdbcUrl}"/>
  28. <property name="user" value="${jdbc.userName}"/>
  29. <property name="password" value="${jdbc.password}"/>
  30. </bean>-->
  31. <!--003.使用dbcp数据源-->
  32. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  33. <property name="driverClassName" value="${jdbc.driverClass}"/>
  34. <property name="url" value="${jdbc.jdbcUrl}"/>
  35. <property name="username" value="${jdbc.userName}"/>
  36. <property name="password" value="${jdbc.password}"/>
  37. </bean>
  38. <!--03.配置dao 在StudentDaoImpl里要使用数据源-->
  39. <bean id="studentDaoImpl" class="cn.pb.dao.impl.StudentDaoImpl">
  40. <property name="dataSource" ref="dataSource"/>
  41. </bean>
  42.  
  43. <!--04.配置service-->
  44. <bean id="studentServiceImpl" class="cn.pb.service.impl.StudentServiceImpl">
  45. <property name="dao" ref="studentDaoImpl"/>
  46. </bean>
  47. </beans>

06.测试代码:

  1. package cn.pb;
  2.  
  3. import cn.pb.bean.Student;
  4. import cn.pb.service.StudentService;
  5. import org.springframework.context.ApplicationContext;
  6. import org.springframework.context.support.ClassPathXmlApplicationContext;
  7.  
  8. import java.util.List;
  9.  
  10. public class TestJdbc {
  11.  
  12. public static void main(String[] args) {
  13. ApplicationContext context=new
  14. ClassPathXmlApplicationContext("applicationContext.xml");
  15. StudentService service= (StudentService) context.getBean("studentServiceImpl");
  16. //service.addStudent(new Student(25,"xixi"));
  17. List<Student> list=service.findAllStudents();
  18. System.out.println(list);
  19. }
  20. }

Spring笔记05(Spring JDBC三种数据源和ORM框架的映射)的更多相关文章

  1. 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比

    [原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...

  2. spring对事务支持的三种形式

    spring对事务支持的三种形式: 1.通过spring配置文件进行切面配置 <bean id="***Manager" class="org.springfram ...

  3. Spring Boot应用启动的三种方式

    Spring Boot应用HelloWorld的三种启动方式: 项目的创建可以在http://start.spring.io/网站中进行项目的创建. 首先项目结构: 1.  通过main方法的形式启动 ...

  4. JSON三种数据解析方法(转)

    原 JSON三种数据解析方法 2018年01月15日 13:05:01 zhoujiang2012 阅读数:7896    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...

  5. Excel应该这么玩——5、三种数据:Excel也是系统

        Excel最常用的功能就是记录数据,把数据按照行列记录下来.这部分数据是源数据,是业务活动中最原始的流水账,作为后续操作的依据.为了从源数据中得出一定的结论,需要对源数据进行分析得出报表数据. ...

  6. Hibernate中的三种数据状态

    Hibernate中的三种数据状态(临时.持久.游离) 1.临时态(瞬时态) 不存在于session中,也不存在于数据库中的数据,被称为临时态. 比如:刚刚使用new关键字创建出的对象. 2.持久态 ...

  7. Docker 数据管理-三种数据mount方式

    可以在Container可写层存储数据,但是有三个缺点: 当Container销毁时,数据不能持久保存. Container的可写层和Container所在的主机紧耦合,不容易将数据移动到其他地方. ...

  8. 浅谈Hibernate中的三种数据状态

    Hibernate中的三种数据状态:临时.持久.游离 1.临时态(瞬时态) 不存在于session中,也不存在于数据库中的数据,被称为临时态. 数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器 ...

  9. Linux 双线策略路由的三种实现方式总结+端口映射

    Linux 双线策略路由的三种实现方式总结+端口映射 Linux 双线策略路由的三种实现方式总结+端口映射 网络环境 服务器(网关): eth0 为LAN口,IP为 LAN_IP = 192.168. ...

随机推荐

  1. 转:PCIe基础知识

    PCIe基础知识   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zqixiao_09/article/details/51842542 PCIe ...

  2. PHP下最好用的富文本HTML过滤器:HTMLPurifier使用教程

    HTMLPurifier是我目前用过最好的PHP富文本HTML过滤器了,采用了白名单机制,有效杜绝了用户提交表单中的非法HTML标签,从而可以防止XSS攻击! HTMLPurifier项目地址:htt ...

  3. pooler 连接池中报错" error_no_members"

    连接池驱动,pooler 在使用中会报错" error_no_members" 分析:可能有以下3个地方对其有影响:    1)member 可能没回收: 2)wait_for_p ...

  4. linux下安装go

    在centOS下,安装go的环境,如下: 下载压缩包,wget https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz 解压该文件 ...

  5. 关于ejabberd限制单点登录

    ejabberd 是对xmpp协议的完全实现,那么单纯的ejabberd是不提供该功能限制的,但是从我们的xmpp协议则可以完全的解决这个问题,我们通过jid对它进行限制,下面可以看一下jid的解释: ...

  6. 查看并修改Linux主机名命令hostname

    查看主机名 hostname可以查看主机名 export也可以查看 修改主机名 echo new-hostname > /proc/sys/kernel/hostname (系统启动时,从此文件 ...

  7. tomcat端口问题

    https://segmentfault.com/q/1010000008858162?_ea=1777730

  8. 高性能流媒体服务器EasyDSS前端重构(二) webpack + vue + AdminLTE 多页面提取共用文件, 优化编译时间

    本文围绕着实现EasyDSS高性能流媒体服务器的前端框架来展开的,具体EasyDSS的相关信息可在:www.easydss.com 找到! 接上回 <高性能流媒体服务器EasyDSS前端重构(一 ...

  9. maven依赖本地非repository中的jar包【转】

    今天在使用maven编译打包一个web应用的时候,碰到一个问题: 项目在开发是引入了依赖jar包,放在了WEB-INF/lib目录下,并通过buildpath中将web libariary导入. 在e ...

  10. vs2013工程技巧

    1 vs工程输出了dll和lib,分别是什么,有什么用? 当设置工程property的Project Defaults的Configuration Type为dll时,不光会生成该动态链接库的dll文 ...