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框架的映射)的更多相关文章

  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. 【Sprint3冲刺之前】软件开发计划书

    TD校园助手软件开发计划书 1.引言 1.1 编写目的 为了保证项目团队按时保质地完成项目目标,便于项目团队成员更好地了解项目情况,使项目工作开展的各个过程合理有序,同时便于老师和其他同学了解我们的项 ...

  2. MySQL系列:innodb源代码分析之线程并发同步机制

    innodb是一个多线程并发的存储引擎,内部的读写都是用多线程来实现的,所以innodb内部实现了一个比較高效的并发同步机制. innodb并没有直接使用系统提供的锁(latch)同步结构,而是对其进 ...

  3. modelsim-altera

    一. 1.  Go to the menu Tools > Options.  2.  In the “General” category, select “EDA Tool Options”. ...

  4. git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base'<--base<--A<--A' ^ | --- B<--B' 小米工程师常常需要寻找两个分支最近的分割点,即base.假设git 树是多叉树,请实现一个算法,计算git树上任意两点的最近分割点。 (假设git树节点数为n,用邻接矩阵的形式表示git树:字符串数组matrix包含n个字符串,每个字符串由字符'0

    // ConsoleApplication10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...

  5. Hadoop关于Wrong FS错误

    关于使用java api上传文件. 在定义一个FileSystem变量的时候伪分布式和单机版的方法是不一样的,单机版使用的是FileSystem类的静态函数 FileSystem hdfs = Fil ...

  6. 精彩回顾 HUAWEI HiAI 亮相华为北研所

    ​​从普通照片变成艺术品,仅需3秒: 从随手拍下的讲解胶片到生成规整清晰的ppt,只要瞬间…… 5月25日在华为北京研究所举办的HUAWEI HiAI技术合作交流会上,伴随着一声声惊叹,数款接入HUA ...

  7. os如何处理键盘的所有按键,显示or不显示,显示是如何显示

    [0]README 0.1) source code and text decription are from orange's implemention of a os , and for comp ...

  8. 内存MCE错误导致暴力扩充messages日志 以及chattr记录

    由于放假,好久没登过服务器,今天登上服务器查看日志意外发现:/var/log/messages文件竟然被撑到20多个G!!!赶紧查看是什么情况,首先,20多个G的文件根本无法查看,因此,我想到了spl ...

  9. Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)

    sftp -b batchfile username@remote_host 报错:Permission denied (publickey,gssapi-keyex,gssapi-with-mic, ...

  10. [转]JS学习之正则表达式

    js正则表达式实例 正则表达式可以: •测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证 •替换文本.可以在文档 ...