复习JDBC操作流程
- 加载数据库连接驱动
- 通过驱动管理类获取数据库连接
- 获取预编译语句
- 设置预编译语句参数
- 执行SQL, 处理结果集
- 释放资源
import java.sql.*;
public class JdbcHelper {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
// 1. 加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
// 2. 通过驱动管理类获取数据库连接
String url = "jdbc:mysql://localhost:3306/developer";
connection = DriverManager.getConnection(url, "root", "root");
String sql = "select * from sys_upms_role where roleCode = ?";
// 3. 获取预编译语句
preparedStatement = connection.prepareStatement(sql);
// 4. 设置预编译语句参数
preparedStatement.setString(1, "system");
// 5. 执行SQL, 处理结果集
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
int id = resultSet.getInt("id");
String roleName = resultSet.getString("roleName");
System.out.println(roleName);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 6. 释放资源
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) {
e.printStackTrace();
}
}
}
}
}
Mybatis快速使用
- 导入MyBatis开发包和数据库驱动包
<properties>
<!-- 使用UTF-8编码 -->
<project.build.sourceencoding>UTF-8</project.build.sourceencoding>
<project.reporting.outputencoding>UTF-8</project.reporting.outputencoding>
<!-- 使用jdk1.8版本 -->
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--mybatis-->
<dependency>
<groupid>org.mybatis</groupid>
<artifactid>mybatis</artifactid>
<version>3.5.2</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupid>mysql</groupid>
<artifactid>mysql-connector-java</artifactid>
<version>8.0.15</version>
<scope>runtime</scope>
</dependency>
</dependencies>
- 创建数据表
CREATE TABLE `sys_upms_role` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`roleCode` varchar(50) NOT NULL COMMENT '角色编号',
`roleName` varchar(200) NOT NULL COMMENT '角色名称',
`ifVisible` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否可见;1:可见,默认值;0:不可见',
`ifEnabled` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否有效:默认0无效;',
`sequence` int(11) DEFAULT '0' COMMENT '排序码',
`creator` int(11) NOT NULL,
`createTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建日期',
`modifier` varchar(255) DEFAULT NULL,
`updateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改日期',
`remark` varchar(255) DEFAULT NULL COMMENT '描述',
PRIMARY KEY (`id`),
UNIQUE KEY `roleCode` (`roleCode`,`ifEnabled`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='权限管理系统:角色表'
INSERT INTO sys_upms_role(roleCode,roleName,sequence,creator)VALUES('administrator','超级管理员',1,1);
INSERT INTO sys_upms_role(roleCode,roleName,sequence,creator)VALUES('system','系统管理员',2,1);
INSERT INTO sys_upms_role(roleCode,roleName,sequence,creator)VALUES('configuration','统配置员',3,1);
INSERT INTO sys_upms_role(roleCode,roleName,sequence,creator)VALUES('developer','系统开发人员',4,1);
INSERT INTO sys_upms_role(roleCode,roleName,sequence,creator)VALUES('innerStaff','内部员工',5,1);
INSERT INTO sys_upms_role(roleCode,roleName,sequence,creator)VALUES('archvist','档案管理员',6,1);
INSERT INTO sys_upms_role(roleCode,roleName,sequence,creator)VALUES('guest','访客人员',7,1);
INSERT INTO sys_upms_role(roleCode,roleName,sequence,creator)VALUES('tester','测试人员',8,1);
INSERT INTO sys_upms_role(roleCode,roleName,sequence,creator)VALUES('services','客服人员',9,1);
INSERT INTO sys_upms_role(roleCode,roleName,sequence,creator)VALUES('implement','实施人员',10,1);
- 创建mapper接口
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;
/**
* 把今天最好的表现当作明天最新的起点..~
* <p>
* Today the best performance as tomorrow newest starter!
*
* @类描述: 定义Mapper接口
* @author: <a href="mailto:duleilewuhen@sina.com">独泪了无痕</a>
* @创建时间: 2020/7/10 00:47
* @版本: V 1.0.1
* @since: JDK 1.8
*/
@Mapper
public interface RoleMapper {
/**
* 获取数据列表
* @return
*/
List<map<string, object>> getRoleList();
}
- 编写Mapper.xml配置文件
MyBatis 提供的所有特性都可以利用基于 XML 的映射语言来实现,一个基于 XML 映射语句的示例,它应该可以满足 SqlSession 的调用。
<!--?xml version="1.0" encoding="UTF-8"?-->
<!--
namespace 是mapper接口,不能填错。
Mybatis框架底层会根据namespace的值来定位当前这个mapper文件-->
<mapper namespace="org.dllwh.dao.RoleMapper">
<select id="getRoleList" resulttype="java.util.HashMap">
select * from sys_upms_role
</select>
</mapper>
MyBatis映射文件概述:
- 在src下添加 MyBatis 核心文件
每个基于MyBatis的应用都是以一个SqlSessionFactory的实例为核心的。SqlSessionFactory 的实例可以通过SqlSessionFactoryBuilder获得。而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先配置的Configuration实例来构建出SqlSessionFactory实例。创建mybatis-config.xml文件,在里面添加配置文件内容。XML配置文件中包含了对MyBatis系统的核心设置,包括获取数据库连接实例的数据源以及决定事务作用域和控制方式的事务管理器。
<!--?xml version="1.0" encoding="UTF-8"?-->
<!-- mybatis的主配置文件,主要配置数据库连接信息 -->
<configuration>
<!-- 配置环境 -->
<environments default="development">
<!-- 配置mysql的环境 -->
<environment id="development">
<!-- 配置事务的类型。
JDBC:将事务交给JDBC管理(推荐)
MANAGED:自己管理事务
-->
<transactionmanager type="JDBC" />
<!-- 配置数据源(连接池) -->
<datasource type="POOLED">
<!-- 配置连接数据库的4个基本信息 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/developer" />
<property name="username" value="root" />
<property name="password" value="root" />
</datasource>
</environment>
</environments>
<!-- 指定映射配置mapper文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
<mappers>
<mapper resource="org/dllwh/dao/impl/RoleMapper.xml" />
</mappers>
</configuration>
- 编写测试类完成相关 API 的使用
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 org.dllwh.dao.RoleMapper;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
public class MybatisHelper {
/**
* 构建 SqlSessionFactory实例
*/
private static SqlSessionFactory sqlSessionFactory;
static {
try {
// 1.读取Mybatis的核心配置文件[mybatis-config.xml]
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
// 2.创建SqlSessionFactory工厂
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取SqlSession连接
*
* @return
*/
public static SqlSession getSession() {
// 3.使用工厂生产SqlSession对象(打开与数据库的连接) true: 表示自动提交, 默认是false即手动提交
return sqlSessionFactory.openSession();
}
public static void main(String[] args) {
// 4.使用SqlSession创建Dao接口的代理对象
RoleMapper roleMapper = getSession().getMapper(RoleMapper.class);
// 5.使用代理对象执行方法
List<map<string, object>> roleList = roleMapper.getRoleList();
roleList.forEach(System.out::println);
// 6.提交事务(如果需要的话)
getSession().commit();
// 7.释放资源
session.close();
}
}
</map<string,></map<string,></p>