前言
jdbc回顾
总结
mybati概述
前言
mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,
而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中
sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并
返回。
采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我
们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。
jdbc回顾
>`在这里插public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//通过驱动管理类获取数据库链接
connection = DriverManager
.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8","ro
ot", "root");
//定义 sql 语句 ?表示占位符
String sql = "select * from user where username = ?";//获取预处理 statement
preparedStatement = connection.prepareStatement(sql);
//设置参数,第一个参数为 sql 语句中参数的序号(从 1 开始),第二个参数为设置的
参数值
preparedStatement.setString(1, "王五");
//向数据库发出 sql 执行查询,查询出结果集
resultSet = preparedStatement.executeQuery();
//遍历查询结果集
while(resultSet.next()){
System.out.println(resultSet.getString("id")+"
"+resultSet.getString("username"));
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//释放资源
if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
} }
if(preparedStatement!=null){
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
} }
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }}
问题分析
1、数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
2、Sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java
代码。
3、使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能
多也可能少,修改 sql 还要修改代码,系统不易维护。
4、对结果集解析存在硬编码(查询列名),sql 变化导致解析代码变化,系统不易维护,如果能将数据库记
录封装成 pojo 对象解析比较方便。
我使用的是IDEA作为开发工具,一下图片是我的maven工程
编写实体类org.mybatis //下载mybatis jar包mybatis 3.4.5 junit //做junit测试使用junit 4.10 test mysql //导入mysql驱动mysql-connector-java 8.0.12 runtime log4j //日志组件来一个log4j 1.2.12
public class User implements Serializable {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
public Integer getId() {
return id; }
public void setId(Integer id) {
this.id = id; }
public String getUsername() {
return username; }
public void setUsername(String username) {
this.username = username; }
public Date getBirthday() {
return birthday; }
public void setBirthday(Date birthday) {
this.birthday = birthday; }
public String getSex() {
return sex; }
public void setSex(String sex) {
this.sex = sex; }
public String getAddress() {
return address; }
public void setAddress(String address) {
this.address = address; }
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", birthday=" + birthday
+ ", sex=" + sex + ", address="
+ address + "]"; } }
实现Serializable接口序列化,网上说Java对象都是存储在内存中,可以各个线程之间进行对象传输,但是无法在进程之间进行传输,所以需要序列化为字节序列,进行传输和存储。
总结提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
public interface IUserDao {
List findAll();
}
编写持久层接口的映射文件UserDao.xml
这个xml文件是在resources下,并创建和UserDao一样的包,讲师说这个是要求,我也不太懂为什么一定要一样,第一次不一样运行是出错了,找不到包。
编写sqlMapConfig.xml//id是接口的方法名,必须一致,resultYype是让处理结果封装给User对象 select * from user
这个文件也是在resources目录下,但它是单独开的,上级没有包,感觉这个xml就像jdbc.properties一样,因为数据库版本比较高,用的是新的编码形式。
最后就是编写测试类public class MybatisTest {
public static void main(String[] args)throws Exception {
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建 SqlSessionFactory 的构建者对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//3.使用构建者创建工厂对象 SqlSessionFactory
SqlSessionFactory factory = builder.build(in);
//4.使用 SqlSessionFactory 生产 SqlSession 对象
SqlSession session = factory.openSession();
//5.使用 SqlSession 创建 dao 接口的代理对象
IUserDao userDao = session.getMapper(IUserDao.class);
//6.使用代理对象执行查询所有方法
List users = userDao.findAll();
for(User user : users) {
System.out.println(user);
}
//7.释放资源
session.close();
in.close();
} }
用的是sqlyong图形化工具,找个sql语句执行了一下,
打印的是这些信息,旁边一些信息也不懂是什么意思。
看过视频的人便知道这个是某马的一个b站视频,我是小白,刚接触框架,今天的内容和以往的学习都不太一样,多了许多文件的配置,映射的内容,记住环境的搭建方式,也能让我以后可以回顾,今天是第一天,不知道test测试类的建立为什么是这样,这样做的意义是什么,以后是不是还有更简便的方式,在实际开发中,不需要在编写Impl类,使用注解开发。要有好多东西要学,坚持做笔记。
补充:自定义mybatis框架这个内容我初看听的迷糊,涉及到源码的内容先了解一下有个概念,等学完ssm后在来一次系统的源码分析。



