博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring笔记05(Spring JDBC三种数据源和ORM框架的映射)
阅读量:5024 次
发布时间:2019-06-12

本文共 9652 字,大约阅读时间需要 32 分钟。

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="666888";        /**         * 创建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(1,2);            //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="666888";        /**         * 创建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(1,3);            //05.返回结果            rs=pst.executeQuery();            while (rs.next()){                //获取元数据的结果集 元数据:描述数据的数据                ResultSetMetaData metaData = rs.getMetaData();                System.out.println("元数据"+metaData);                int columnCount = metaData.getColumnCount();                //遍历元数据集合                for (int i=1;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(0,1).toUpperCase()+name.substring(1); }

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
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
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
{ /** * * @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
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
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.Driverjdbc.jdbcUrl=jdbc:mysql://localhost:3306/springjdbc.userName=rootjdbc.password=666888

05.applicationContext.xml文件:

 

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
list=service.findAllStudents(); System.out.println(list); }}

 

转载于:https://www.cnblogs.com/lyb0103/p/7658530.html

你可能感兴趣的文章
NAT虚拟网络配置
查看>>
c#部分---需要实例化的内容;
查看>>
销售类
查看>>
技术项目,问题
查看>>
线程池总结
查看>>
Learning to rank (software, datasets)
查看>>
git常见问题
查看>>
.NETFramework:template
查看>>
HM16.0之帧内模式——xCheckRDCostIntra()函数
查看>>
Jmeter性能测试 入门
查看>>
安卓动画有哪几种?他们的区别?
查看>>
Nodejs学习总结 -Express入门(一)
查看>>
web前端优化
查看>>
ssh 连接原理及ssh-keygen
查看>>
vs2013编译qt程序后中文出现乱码
查看>>
【转】IOS数据库操作SQLite3使用详解
查看>>
Android官方技术文档翻译——ApplicationId 与 PackageName
查看>>
设计网站大全
查看>>
JVM CUP占用率过高排除方法,windows环境
查看>>
【转】JAVA字符串格式化-String.format()的使用
查看>>