栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

持久层 学习笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

持久层 学习笔记

目录
  • 1、JDBC
    • 1-1、简介
    • 2-1、入门案例
      • 思考总结
  • 2、Mybatis(封装简化JDBC)
    • 2-1、入门案例(查询)
    • 2-2、入门案例二(增加、删除、修改)
    • 2-3、常见错误
    • 2-4、log4j日志框架
    • 2-5、占位符
      • 2-5-1、通过Map对象封装
      • 2-5-2、通过对象封装
      • 2-5-3、#{}, ${}两种占位符的区别

1、JDBC 1-1、简介

  用于java程序连接并访问数据库的一款工具,也是说明书,规定统一了格式,
  进行真正的增删改查操作需要由数据库驱动包(jar)包来实现(jar包由不同厂商提供,其中包含了编译后的Class文件,其中又有很多工具类,以实现GRUD)。同时也产生了不同jar包,对应也有不同的API,造成学习成本高的问题,后由sun公司提供了一套接口,要求所有厂商都需实现此接口,实现了API的统一,提供了规范,这个规范就是jdbc
  jdbc的jar包已经被java包含,但其中大部分都是接口规范,需要实现具体功能需要导入数据库对应的驱动包

实现流程图:

2-1、入门案例

1、准备好要查询的数据后导包,创建lib目录(Folder),导入mysql驱动包(下载),创建引用(选择右键–> Build Path --> Add To Build Path)

2、导包完成后写JDBC代码

	public static void main(String[] args) throws Exception {
		//1、注册数据库驱动   将创建mysql驱动包反射对象,会动态将其放入DriverManager进行管理
		Class.forName("com.mysql.cj.jdbc.Driver");
		//2、获取数据库连接   通过DriverManager类提供方法获取连接,设置端口、数据库和字符集,时区
		Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jt_db?characterEncoding=utf-8&serverTimezone=Asia/Shanghai"
				,"root","root");
		System.out.println("连接成功!");
		//3、获取传输器,//Statment为接口,规定了格式,如统一方法的名称
		Statement stat = connection.createStatement();
		//4、发送sql到数据库执行,并返回执行结果  mysql Driver实现的具体方法,
		ResultSet rs = stat.executeQuery("select * from account");
		//5.处理结果(将查询的结果一行行输出到控制台)
		while(rs.next()) {
			int id = rs.getInt("id");
			String name = rs.getString("name");
			double money = rs.getDouble("money");
			System.out.println(id+ "," + name+ "," + money);
		}
		
		
		
		//6.释放资源
		rs.close();
		stat.close();
		connection.close();
	}

补充:事务 (多个sql语句绑定一起执行,考面试)
1、事务四大特性:
原子性:事务作为最小单元不可分割,一条sql语句报错整个sql便都不能执行
一致性:事务执行前后的业务数据之和保持不变
隔离性:事务并发时,事务之间互相隔离
持久性:事务提交后,数据库持久保存在磁盘中
2、事务操作:
默认每一个sql就是一个单独的事务,自动开启提交
事务包含多条sql需手动开启结束
begin开启事务后,需要commit提交事务才会真正修改数据,换成rollback则回滚

思考总结
通过入门案例不难发现JDBC有以下缺点:.
1、大量重复代码,注册连接传输器释放资源..
2、查询语句处理结果集麻烦,需要一个个列获取(参考入门案例)
3、将SQL语句、连接参数写死在程序中,后期上线维护困难 .
除此之外,JDBC虽然作为传统底层方法,访问速度比第三方框架速度快,但却没有连接池(类似常量池,创建一次后直接从池中拿,无需自身创建连接),导致每次都需自身创建关闭连接,耗时效率低下 .
由此针对JDBC源生代码的缺点,引出了一个优秀的持久层(程序连接数据库的部分)框架——Mybatis

2、Mybatis(封装简化JDBC) 2-1、入门案例(查询)
  • 实现查看数据库表。IDE:Eclipse:Simple maven Project ,maven工程目录如下:


连接关系:EmpMapper.xml<—MybatisDemo01.java—>mybatis-config.xml—>EmpMapper.xml—>pojo.Emp.java

1、MybatisDemo01

  • 两处配置文件名、Emp类名可修改,
public class MybatisDemo01 {
	public static void main(String[] args) throws Exception {
		//1.读取mybatis核心配置文件中的配置信息(mybatis-config.xml)
		InputStream in = Resources.getResourceAsStream( "mybatis-config.xml" );
		//2.基于上面读取的配置信息获取SqlSessionFactory对象(工厂)
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build( in );
		//3.打开与数据库的连接(即通过工厂对象获取SqlSession对象)
		SqlSession session = factory.openSession();
		//4.通过namespace+id找到并执行SQL语句, 返回处理后的结果
		//EmpMapper.xml, List
		List list = session.selectList( "EmpMapper.findAll" );
		//5.输出结果
		for (Emp emp : list) {
			System.out.println( emp );
		}
	}
}

2、POJO.Emp

public class Emp {
	//提供私有属性
	private Integer id;
	private String name;
	private String job;
	private Double salary;
	//提供get、set、toString方法..

3-1、EmpMapper.xml

  • namespace:为mapper取名,id:为sql操作取名。
    调用:List list = session.selectList( “EmpMapper.findAll” );




	
	
	
	
		insert into emp value(null,"马云","教师",800)