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

mybatis学习笔记 第一天

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

mybatis学习笔记 第一天

mybatis学习笔记

前言
jdbc回顾
总结

mybati概述


前言

mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,
而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中
sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并
返回。
采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我
们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。

jdbc回顾

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 对象解析比较方便。

mybatis搭建开发环境

我使用的是IDEA作为开发工具,一下图片是我的maven工程

给mybatis添加坐标

 
 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提供了大量能使我们快速便捷地处理数据的函数和方法。

编写UserDao
public interface IUserDao {

List findAll();
}
编写持久层接口的映射文件UserDao.xml

这个xml文件是在resources下,并创建和UserDao一样的包,讲师说这个是要求,我也不太懂为什么一定要一样,第一次不一样运行是出错了,找不到包。


 
 //id是接口的方法名,必须一致,resultYype是让处理结果封装给User对象
 
select * from user

编写sqlMapConfig.xml

 
 
 
 
  






  


这个文件也是在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后在来一次系统的源码分析。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/332124.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号