一.jdbc的缺点
1.1 缺点描述
原始的jdbc在开发中存在如下问题:
1.数据库连接创建、释放频繁造成系统资源浪费从而影响系统的性能。
2.sql语句在代码中编码、造成代码不方便维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
3.查询操作时,需要手动将结果集中的数据手动封装到实体中,插入数据时,需要手动将实体的数据设置到sql语句的占位符位置。
1.2 解决方案
1.使用数据库连接池初始化连接资源
2.将sql语句抽取到xml配置文件中。
3.使用反射,内省等底层技术,自动将实体与表进行数学与字段的自动映射。
二.mybaits的介绍
2.1 mybaits是什么?
mybaits是一个优秀的给基于java的持久层框架,它封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费太多精力去处理加载驱动、创建连接、创建statement等繁琐的过程。
mybaits通过xml或注解的方式将要执行的各种statemnt配置起来,并通过java对象和statemnt中sql的动态参数进行映射成最终执行的sql语句。
mybatis框架执行并将结果映射为java对象并返回。采用ORM思想来解决实体和数据库映射的问题,对jdbc进行了封装,屏蔽了jdbc api的底层访问细节,使我们不用与jdbc api打交道,就可以完成对数据库的持久化操作。
简而言之:mybaits是一个持久层的框架,对jdbc的封装,采用ORM思想,将sql语句映射成java实体,不必太关心底层的实现细节。
三.mybaits工程的搭建步骤
3.1 搭建步骤概览
1.添加mybaits的坐标
2.创建user的数据表
3.编写user实体类
4.编写映射文件UserMapper.xml
5.编写核心文件SqlMapConfig.xml
6.编写测试类
3.2 操作具体流程
3.2.1 创建项目mybaits-demo
最后建工程如下:
3.2.2 在pom文件中配置依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<!--mywql dueong -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<!--mybaits -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!-- log4j-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
防止加载找不到文件路径:pom文件再加入以下代码
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
3.2.3.创建javavean
package com.mybaits.demo.bean;
/**
* @ClassName: User
* @Description: TODO
* @Author: liujianfu
* @Date: 2021/01/23 20:45:36
* @Version: V1.0
**/
public class User
{
private int id;
private String userName;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", userName='" + userName + '\'' +
", password='" + password + '\'' +
'}';
}
}
3.2.4.创建数据库表
CREATE TABLE `tb_user` (
`id` int(11) NOT NULL COMMENT '注解',
`user_name` varchar(255) DEFAULT NULL COMMENT '姓名',
`password` varchar(255) DEFAULT NULL COMMENT '密码',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.2.5 创建resouces目录
1.在src\mian下创建resouces文件夹
3.2.6 在resouce目录下创建mapper文件和核心配置文件
1.jdbc配置文件,mybaits-jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/nongda
jdbc.username=root
jdbc.password=
2.创建mapper文件,在resouces文件目录下,新建com/mybaits/mapper/UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="yonghuMapper">
<!-- 查询 -->
<select id="findAll" resultType="com.mybaits.demo.bean.User">
select id,user_name,password from tb_user
</select>
<!-- 添加-->
<insert id="addUser" parameterType="com.mybaits.demo.bean.User">
insert into tb_user(id,user_name,password) values(#{id},#{userName},#{password})
</insert>
<!-- 修改-->
<update id="updateUser" parameterType="com.mybaits.demo.bean.User">
update tb_user set user_name=#{userName} where id=#{id}
</update>
<!-- -->
<delete id="delUser" parameterType="java.lang.Integer">
delete from tb_user where id=#{id}
</delete>
</mapper>
3.创建核心配置文件:mybaitsConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="mybaits-jdbc.properties"></properties>
<!-- 数据源环境 -->
<environments default="developement">
<environment id="developement">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- -->
<mappers>
<mapper resource="com/mybaits/mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
4.整个代码的结构如下:
四.crud操作案例
4.1 新增
代码:
public static void add() throws IOException {
User user=new User();
user.setId(1);
user.setUserName("ljf");
user.setPassword("123");
//加载核心配置文件
InputStream resourcesAsStream= Resources.getResourceAsStream("mybaitsConfig.xml");
//获得sqlsession 工厂对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourcesAsStream);
//获得sqlsession对象
SqlSession sqlSession=sqlSessionFactory.openSession();
//执行sql
sqlSession.insert("yonghuMapper.addUser",user);
//mybaits 执行更新操作,提交事务
sqlSession.commit();
//关闭释放资源
sqlSession.close();
}
结果:
4.2 查询
1.查询
public static void query() throws IOException {
//加载核心配置文件
InputStream resourcesAsStream= Resources.getResourceAsStream("mybaitsConfig.xml");
//获得sqlsession 工厂对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourcesAsStream);
//获得sqlsession对象
SqlSession sqlSession=sqlSessionFactory.openSession();
//执行sql
List<User> userList=sqlSession.selectList("yonghuMapper.findAll");
//打印资源
System.out.println("userlist:"+userList);
//关闭释放资源
sqlSession.close();
}
2.查询
4.3 修改
代码:
public static void update() throws IOException {
User user=new User();
user.setId(1);
user.setUserName("liu");
user.setPassword("123");
//加载核心配置文件
InputStream resourcesAsStream= Resources.getResourceAsStream("mybaitsConfig.xml");
//获得sqlsession 工厂对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourcesAsStream);
//获得sqlsession对象
SqlSession sqlSession=sqlSessionFactory.openSession();
//执行sql
sqlSession.update("yonghuMapper.updateUser",user);
//mybaits 执行更新操作,提交事务
sqlSession.commit();
//关闭释放资源
sqlSession.close();
}
4.4 删除
public static void del() throws IOException {
//加载核心配置文件
InputStream resourcesAsStream= Resources.getResourceAsStream("mybaitsConfig.xml");
//获得sqlsession 工厂对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourcesAsStream);
//获得sqlsession对象
SqlSession sqlSession=sqlSessionFactory.openSession();
//执行sql
sqlSession.delete("yonghuMapper.delUser",1);
//mybaits 执行更新操作,提交事务
sqlSession.commit();
//关闭释放资源
sqlSession.close();
}
4.5 完整代码
package com.mybaits.demo;
import com.mybaits.demo.bean.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.*;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.List;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args ) throws IOException {
// add();
// query();
// update();
del();
System.out.println( "Hello World!" );
}
public static void query() throws IOException {
//加载核心配置文件
InputStream resourcesAsStream= Resources.getResourceAsStream("mybaitsConfig.xml");
//获得sqlsession 工厂对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourcesAsStream);
//获得sqlsession对象
SqlSession sqlSession=sqlSessionFactory.openSession();
//执行sql
List<User> userList=sqlSession.selectList("yonghuMapper.findAll");
//打印资源
System.out.println("userlist:"+userList);
//关闭释放资源
sqlSession.close();
}
public static void add() throws IOException {
User user=new User();
user.setId(1);
user.setUserName("ljf");
user.setPassword("123");
//加载核心配置文件
InputStream resourcesAsStream= Resources.getResourceAsStream("mybaitsConfig.xml");
//获得sqlsession 工厂对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourcesAsStream);
//获得sqlsession对象
SqlSession sqlSession=sqlSessionFactory.openSession();
//执行sql
sqlSession.insert("yonghuMapper.addUser",user);
//mybaits 执行更新操作,提交事务
sqlSession.commit();
//关闭释放资源
sqlSession.close();
}
public static void update() throws IOException {
User user=new User();
user.setId(1);
user.setUserName("liu");
user.setPassword("123");
//加载核心配置文件
InputStream resourcesAsStream= Resources.getResourceAsStream("mybaitsConfig.xml");
//获得sqlsession 工厂对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourcesAsStream);
//获得sqlsession对象
SqlSession sqlSession=sqlSessionFactory.openSession();
//执行sql
sqlSession.update("yonghuMapper.updateUser",user);
//mybaits 执行更新操作,提交事务
sqlSession.commit();
//关闭释放资源
sqlSession.close();
}
public static void del() throws IOException {
//加载核心配置文件
InputStream resourcesAsStream= Resources.getResourceAsStream("mybaitsConfig.xml");
//获得sqlsession 工厂对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourcesAsStream);
//获得sqlsession对象
SqlSession sqlSession=sqlSessionFactory.openSession();
//执行sql
sqlSession.delete("yonghuMapper.delUser",1);
//mybaits 执行更新操作,提交事务
sqlSession.commit();
//关闭释放资源
sqlSession.close();
}
}