一、mysql JDBC连接
import java.sql.*; public class testmysql { static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://数据库域名:端口/库名?user=账号&password=密码"; public static void main(String[] args) { Connection conn = null; Statement stmt = null; ResultSet rs = null; String sql = "SELECT * from idrisk_rule_kyc_type_result where id_account in ('2226447','2228231')"; try { Class.forName(JDBC_DRIVER);// 加载驱动 conn = DriverManager.getConnection(DB_URL);// 获取数据库连接 stmt = conn.createStatement();// 创建执行环境 rs = stmt.executeQuery(sql);// 执行SQL语句
while (rs.next()) {// 输出数据 System.out.println("id_account: " + rs.getInt("id_account")); System.out.println("call_type: " + rs.getString("call_type")); } } catch (ClassNotFoundException e) { System.out.println("加载驱动异常"); e.printStackTrace(); } catch (SQLException e) { System.out.println("数据库异常"); e.printStackTrace(); } finally { try { if (rs != null) rs.close(); // 关闭结果数据集 if (stmt != null) stmt.close(); // 关闭执行环境 if (conn != null) conn.close(); // 关闭数据库连接 } catch (SQLException e) { e.printStackTrace(); } } } }
二、Mybatis
1、一款优秀的持久层框架(持久层就是DAO层,就是操作数据库的部分)
2、支持自定义 SQL、存储过程以及高级映射。
3、免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
4、通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录
github下载 https://github.com/mybatis/mybatis-3/releases
maven配置 https://mvnrepository.com/search?q=MYBATIS
中文文档 https://mybatis.net.cn/index.html
什么是持久化?
1、持久化是将程序数据在持久状态和瞬时状态间转换的机制
2、将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。
JDBC就是一种持久化机制,文件IO也是一种持久化机制
步骤一,配置maven环境(依赖包)
<!-- mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency>
步骤二,配置maven环境(资源路径)
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build>
步骤三,配置mybatis环境
<?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> <environments default="development"> <environment id="development"> <!--事务管理--> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/employees?serverTimezone=Asia/Shanghai&useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="账号"/> <property name="password" value="密码"/> </dataSource> </environment> <!--可以配置默认和其他的环境--> <!-- <environment id="test">--> <!-- <transactionManager type="JDBC"/>--> <!-- <dataSource type="POOLED">--> <!-- <property name="driver" value="${driver}"/>--> <!-- <property name="url" value="${url}"/>--> <!-- <property name="username" value="${username}"/>--> <!-- <property name="password" value="${password}"/>--> <!-- </dataSource>--> <!-- </environment>--> </environments> <!--mapper注册--> <mappers> <mapper resource="com/yin/xml/EmployeesDao.xml"/> </mappers> </configuration>
步骤四,创建mybatis工具类
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; public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try { String resource = "comfig/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
步骤五,创建pojo类
步骤六,创建mapper接口类
import com.yin.pojo.Employees; import java.util.List; public interface EmployeesMapper { List<Employees> getEmployeesList(int emp_no); }
步骤七,创建mapper接口的实现——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"> <!--namespace对应mapper接口类--> <mapper namespace="com.yin.mappers.EmployeesMapper"> <!--id对应mapper接口类的方法,resultType对应结果类型,parameterType对应入参类型--> <select id="getEmployeesList" resultType="com.yin.pojo.Employees"> select * from Employees where emp_no = #{emp_no} </select> </mapper>
步骤八,将步骤五注册到步骤二的mapper中
步骤九,测试
import com.yin.pojo.Employees; import com.yin.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class EmployeesDaoTest { @Test public void test() { SqlSession sqlSession = MybatisUtils.getSqlSession(); List<Employees> Emps = sqlSession.getMapper(EmployeesMapper.class).getEmployeesList(10001); for (Employees e : Emps) { System.out.println(e); } sqlSession.close(); } }
三、Mybatis 之 resultMap
从user表中查询一条数据出来,查询的结果是一个user对象,即mybatis会自动帮我们把查询的结果转为一个user对象,
只要两者的名称一样,mybatis在转化的过程中就知道数据库的字段和JavaBean中的属性对应。
实际开发中,JavaBean中的属性命名我们习惯于驼峰命名法,在数据库中我们更常用下划线命名法
1、使用SQL语句中的别名功能
select id,user_name as userName,password,address from user
2、使用mapUnderscoreToCamelCase属性
mybatis的配置文件中,有一个settings节点,该节点中都是setting节点,setting节点有一个属性叫做mapUnderscoreToCamelCase,
该属性表示是否开启自动驼峰命名规则映射,即从经典的数据库列名A_COLUMN到经典Java属性名aColumn的映射,
这种方式要求我们的数据库字段命名和JavaBean属性命名都要非常规范才能实现
3、使用resultMap来解决
<resultMap id="userMap" type="org.sang.bean.User"> <id property="id" column="id" javaType="long" jdbcType="NUMERIC"/> <result property="userName" column="user_name" javaType="string" jdbcType="VARCHAR"/> <result property="password" column="password" javaType="string" jdbcType="VARCHAR"/> <result property="address" column="address" javaType="string" jdbcType="VARCHAR"/> </resultMap>
1、resultMap这个id是resultMap的唯一标识符,后面引用就是通过这个id来引用,然后还定义了type属性,type属性指明了这个resultMap它对应的是哪个JavaBean。
2、在resultMap节点中,id表示哪个字段代表这主键,result节点定义了普通的映射关系,property表示JavaBean中的属性名称,column表示数据库中的字段名称,javaType代表JavaBean中该属性的类型,jdbcType则表示数据库中该字段的类型
<select id="getUser" resultMap="userMap" parameterType="Long"> select * from user where id = #{id} </select>
参考来源: