1.Mybatis 是一个优秀的基于java的持久层框架,它内部封装了jdbc 使用者只需要关注sql语句的本身, 而不需要花费时间去处理驱动,创建连接,创建statement等繁杂的过程。mybatis通过xml或注解的方式,将要执行的各种statement配置起来,并通过Java对象和statement的动态参数进行映射生成最终执行的sql语句最后与mybatis框架来执行,采用orm的思想,解决了实体和数据库映射的问题,对jdbc进行了封装,屏蔽了jdbc底层访问的细节使我们不用额jdbc打交道,
2.jdbc回顾
package com.company;
import com.sun.java.util.jar.pack.DriverResource_zh_CN;
import java.net.URL;
import java.sql.*;
public class jdbcutils {
public static void main(String[] args) throws SQLException {
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
/*加载驱动*/
Class.forName("com.mysql.jdbc.Driver");
//通过驱动获取数据库连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis", "root" ,
"123456");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
// d定义sql语句
String sql = "select * from user where username= ?";
//获取预处理
Connection connection=null;
PreparedStatement preparedStatement1 = connection.prepareStatement(sql);
try {
//设置参数
preparedStatement1.setString(1, "王五");
} catch (SQLException e) {
e.printStackTrace();
}
//向数据库发送请求 查询结果集
resultSet = preparedStatement1.executeQuery();
//遍历结果集
while (resultSet.next()) {
System.out.println(resultSet.getString("id") + "" + resultSet.getString("username"));
}
//s释放资源
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
3.使用jdbc' 数据库连接创建释放资源很是频繁,从而造成资源浪费。sql语句在代码中硬编码,不方便代码的维护,使用占位符参数存在硬编码对结果集 存在因编码, 省钱了变化, 导致解析代码变化,系统不易维护。
二
1.mybatis入门
通过使用maven 框架的方式 创建项目
1.创建mybatis的坐标也就是pom.Xml文件
2.创建实体类
3.编写持久层接口IuserDao
4.编写持久层接口的映射文件(必须以持久层 接口名称命名文件名 拓展名是xml
比如说 dao层 的接口是 IUserDao 映射文件 必须是 IUserDao.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="com.itheima.dao.IUserDao">
<!--配置查询所有-->
<select id="findAll" resultType="com.itheima.domain.User">
select * from user
</select>
</mapper>
5.编写sqlMapConfig.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">
<!-- mybatis的主配置文件 -->
<configuration>
<!-- 配置环境 -->
<environments default="mysql">
<!-- 配置mysql的环境-->
<environment id="mysql">
<!-- 配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源(连接池) -->
<dataSource type="POOLED">
<!-- 配置连接数据库的4个基本信息 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
<mappers>
<mapper resource="com/itheima/dao/IUserDao.xml"/>
</mappers>
</configuration>
6.编写测试类
package com.itheima.test;
import com.itheima.dao.IUserDao;
import com.itheima.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* Created by admin on 2019/4/29.
*/
public class MybatisTest {
public static void main(String[] args) throws IOException {
/*读取配置文件*/
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"
/*创建SqlSessionFactory 工厂*/
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
// 使用工厂创建sqlsession对象
SqlSession session = factory.openSession();
//使用sqlsession创建dao接口的dailiduixang
IUserDao userDao = session.getMapper(IUserDao.class);
// 使用代理对象执行方法
List<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
//释放资源
session.close();
in.close();
}
}