【目录】
【MyBatis】
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。
MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。
MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。
SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。
MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。
MyBatis 最强大的特性之一就是它的动态语句功能。如果您以前有使用JDBC或者类似框架的经历,您就会明白把SQL语句条件连接在一起是多么的痛苦,
要确保不能忘记空格或者不要在columns列后面省略一个逗号等。动态语句能够完全解决掉这些痛苦。尽管与动态SQL一起工作不是在开一个party,但是MyBatis确实能通过在任何映射SQL语句中
【步骤】
①获取MyBatis加包(在😁项目基础上使用MyBatis)
在https://mvnrepository.com/上搜索MyBatis可以选择相应的版本
②在pop.xml中添加以下代码,管理Mybatis加包
1 <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
2 <dependency>
3 <groupId>org.mybatis</groupId>
4 <artifactId>mybatis</artifactId>
5 <version>3.5.0</version>
6 </dependency>
🌂在Java Resources中创建conf.xml
④配置数据库连接信息
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
3 <configuration>
4 <environments default="development">
5 <environment id="development">
6 <transactionManager type="JDBC" />
7 <!-- 配置数据库连接信息 -->
8 <dataSource type="POOLED">
9 <property name="driver" value="com.mysql.cj.jdbc.Driver" />
10 <property name="url" value="jdbc:mysql://服务器地址:端口号/数据库名称?serverTimezone=GMT%2B8" />
11 <property name="username" value="数据库用户名" />
12 <property name="password" value="数据库密码" />
13 </dataSource>
14 </environment>
15 </environments>
16
17 </configuration>
😭查询数据库中S_User表数据----建立对应的实体类
1 package com.springdemo.model; 2
3 public class User { 4
5 public User(String userId, String userName, String userPwd, String userPower) { 6 super(); 7 this.userId = userId; 8 this.userName = userName; 9 this.userPwd = userPwd; 10 this.userPower = userPower; 11 } 12
13 public User() { 14 super(); 15 } 16
17 private int _key; 18 private String userId; 19 private String userName; 20 private String userPwd; 21 private String userPower; 22
23 public int get_key() { 24 return _key; 25 } 26
27 public void set_key(int _key) { 28 this._key = _key; 29 } 30
31 public String getUserId() { 32 return userId; 33 } 34
35 public void setUserId(String userId) { 36 this.userId = userId; 37 } 38
39 public String getUserName() { 40 return userName; 41 } 42
43 public void setUserName(String userName) { 44 this.userName = userName; 45 } 46
47 public String getUserPwd() { 48 return userPwd; 49 } 50
51 public void setUserPwd(String userPwd) { 52 this.userPwd = userPwd; 53 } 54
55 public String getUserPower() { 56 return userPower; 57 } 58
59 public void setUserPower(String userPower) { 60 this.userPower = userPower; 61 } 62
63 @Override 64 public String toString() { 65 return "User [key=" + _key + ",id="+userId+" name=" + userName + ", power=" + userPower + "]"; 66 } 67 }
注:创建get ,set,构造函数快捷键(右键--> source )
⑥创建User表Sql查询映射文件userMapper.xml
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 <!-- 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的 4 例如namespace="com.springdemo.mapping.userMapper"就是com.springdemo.mapping(包名)+userMapper(userMapper.xml文件去除后缀) 5 -->
6 <mapper namespace="com.springdemo.mapping.userMapper">
7 <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复 8 使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型 9 resultType="com.springdemo.model.User"就表示将查询结果封装成一个User类的对象返回 10 User类就是users表所对应的实体类 11 -->
12
13 <!-- 根据_key查询得到一个user对象-->
14 <select id="getUser" parameterType="int"
15 resultType="com.springdemo.model.User"> <!-- 创建对应user实体类的位置 -->
16 select * from S_USER where _key=#{id} 17 </select>
18 </mapper>
⑦在conf.xml文件中注册userMapper.(<configuration>标签内)
1 <mappers>
2 <!-- 注册userMapper.xml文件, 3 userMapper.xml位于com.springdemo.mapping这个包下,所以resource写成com/springdemo/mapping/userMapper.xml-->
4 <mapper resource="com/springdemo/mapping/userMapper.xml"/>
5 </mappers>
⑧使用Test.java 文件添加测试
1 package com.springdemo.impl; 2
3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.Reader; 6 import java.util.List; 7
8 import com.springdemo.model.User; 9 import com.springdemo.tools.DBTools; 10
11 import org.apache.ibatis.io.Resources; 12 import org.apache.ibatis.session.SqlSession; 13 import org.apache.ibatis.session.SqlSessionFactory; 14 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 15
16 public class Test { 17
18 public static void main(String[] args) throws IOException { 19
20 //mybatis的配置文件
21 String resource = "conf.xml"; 22 //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
23
24 InputStream is = Resources.getResourceAsStream(resource); 25 //构建sqlSession的工厂
26
27 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); 28 //使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件) 29 //Reader reader = Resources.getResourceAsReader(resource); 30 //构建sqlSession的工厂 31 //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader); 32 //创建能执行映射文件中sql的sqlSession
33 SqlSession session = sessionFactory.openSession(); 34 /**
35 * 映射sql的标识字符串, 36 * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值, 37 * getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL 38 */
39
40 /* 根据——key查找 */
41 String statement = "com.springdemo.mapping.userMapper.getUser"; 42 //映射sql的标识字符串,getUser与映射文件中配置select标签id一致 43 //执行查询返回一个唯一user对象的sql
44 User user = session.selectOne(statement,2); 45 System.out.println(user); 46
47 }
⑨执行结果
【增删改查】
修改userMapper.xml统一管理返回类型
1 <resultMap id="userMap" type="com.springdemo.model.User">
2 <id property="_key" column="_key" javaType="java.lang.Integer"></id>
3 <result property="userId" column="userId" javaType="java.lang.String"></result>
4 <result property="userName" column="userName" javaType="java.lang.String"></result>
5 <result property="userPwd" column="userPwd" javaType="java.lang.String"></result>
6 <result property="userPower" column="userPower" javaType="java.lang.String"></result>
7 </resultMap>
resultMap设置对应的实体类
①查询所有user记录
🍕userMapper.xml配置
<select id="selectUser" resultMap="userMap"> select * from s_user </select>
resultMap设置返回的ReusltMap
🍔测试java代码
1 String stateselect = "com.springdemo.mapping.userMapper.selectUser"; 2 List<User> userList = session.selectList(stateselect); 3 for(int i=0;i<userList.size();i++) { 4 System.out.println(userList.get(i)); 5 }
②删除指定user记录
🍟userMapper.xml配置
<delete id="deleteUser" parameterType="int"> delete from S_user where _key=#{_key} </delete>
🌭测试java代码
1 String statementdl = "com.springdemo.mapping.userMapper.deleteUser"; 2 try { 3 session.delete(statementdl,4); 4 session.commit(); 5 } catch (Exception e) { 6 e.printStackTrace(); 7 session.rollback(); 8 }
🌂更新user表记录
🍿userMapper.xml配置
<update id="updateUser" > update S_user set userPwd=#{userName},userPwd=#{userPwd},userPower=#{userPower} where _key=#{_key} </update>
🥓测试java代码
1 String statementup = "com.springdemo.mapping.userMapper.updateUser"; 2 User userup = new User("wqyx","wqyx", "hhh","超级"); 3 userup.set_key(2); 4 try { 5 session.update(statementup, userup); 6 session.commit(); 7 } catch (Exception e) { 8 e.printStackTrace(); 9 session.rollback(); 10 }
④新增user表记录
🍿userMapper.xml配置
<insert id="insertUser" useGeneratedKeys="true" keyProperty="_key"> insert into S_USER (userId,userName,userPwd,userPower) values (#{userId},#{userName},#{userPwd},#{userPower}) </insert>
🥓测试java代码
1 String statementIn = "com.springdemo.mapping.userMapper.insertUser"; 2 User userin = new User("wll","wll", "123456","7000"); 3 try { 4 session.insert(statementIn,userin); 5 session.commit(); 6 } catch (Exception e) { 7 e.printStackTrace(); 8 session.rollback(); 9 }