Mybatis记录
1.创建Maven工程
用idea创建maven工程
2.引入Mybatis依赖
<!-- mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- Lombok工具 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<!--mysql依赖,8.0以上的mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
3.创建jdbc-config.properties文件
将连接数据库的一些配置单独放在一个配置文件中,并把这个配置文件放在resources下(我的mysql是8.0+)
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql:///mybatis?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
jdbc.username=填自己数据库账号,例如(root)不用加双引号
jdbc.password=填自己数据库密码,例如(123456)不用加双引号
注意:关于url要说明一下,useSSL和allowPublicKeyRetrieval和serverTimezone建议都配置
- useSSL=false MySQL 8.0 以上版本不需要建立 SSL 连接的,需要显示关闭
- allowPublicKeyRetrieval=true 允许客户端从服务器获取公钥。
- serverTimezone=UTC 设置时区,mysql驱动8.0+也要指定时区,不然也会报一些错
- 最后总结:如果您使用的mysql是8.0+,建议最好把以上三个参数设置下,避免发生一些莫名错误。
4.创建mybatis-config.xml文件
改xml文件也要放在resources下
<?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="jdbc-config.properties"/>
<!--开启驼峰设置-->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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>
<environment id="test">
<transactionManager type="JDBC"/>
<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这个包下,映射文件要与目标文件同包同名-->
<package name="com.itchen.mapper"/>
</mappers>
</configuration>
5.写一个工具类获取SqlSession
//自己导包
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.InputStream;
public class SqlSessionUtil {
//定义 SqlSessionFactory
private static SqlSessionFactory factory = null;
private static SqlSession session = null;
static {
//使用 静态块 创建一次 SqlSessionFactory
try{
String config = "mybatis-config.xml";
//读取配置文件
InputStream in = Resources.getResourceAsStream(config);
//创建 SqlSessionFactory 对象
factory = new SqlSessionFactoryBuilder().build(in);
}catch (Exception e){
factory = null;
e.printStackTrace();
}
}
/* 获取 SqlSession 对象 */
public static SqlSession getSqlSession(){
if( factory != null){
session = factory.openSession();
}
return session;
}
// 如果到时候不能成功提交事物,就自己手动提交,就不要用这个方法
public static void CommitClose(){
session.commit();
session.close();
}
}
6.写映射文件(xml文件)
映射文件必须和目标文件同包同名
基本结构如图:
Mapper映射文件列举:
<?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 namespace="com.itchen.mapper.UserMapper">
<insert id="insert_user">
insert into user values (null,#{name},#{pwd});
</insert>
<update id="update_user">
update user
<set>
<if test="name!=null">
name =#{name},
</if>
<if test="pwd!=null">
pwd=#{pwd}
</if>
</set>
where id=#{id};
</update>
<delete id="delete_user">
delete from user where id =#{id};
</delete>
<select id="list_user" resultType="com.itchen.pojo.User">
select * from user;
</select>
</mapper>
7.重点问题
7.1 MySQL版本问题
如果自己的MySQL版本是8.0以上,在配置driver与url需要书写如下:
driver:com.mysql.cj.jdbc.Driver
url:jdbc:mysql:///mybatis?useSSL=false
其中mybatis属于自己的数据库名称,只需要修改成自己的数据库名称就行,剩余不用修改
注意url中有3个///符号
7.2 提交问题(重点中的重点,这个问题搞了真tm久!!!!!)
如图,举例:
打印时,数据已经插入进去了,但是最后程序结束时,数据库却没有数据,
解决:是必须要进行提交(commit),才能最后保存数据到数据库中,之前就是这么解决的,
与springboot框架不一样,这里必须要自己提交!!!才会最终保存数据到数据库上!!!我在springboot中用mybatis时,好像没有自己手动提交过,可能在springboot框架中有些设置帮我进行了提交
提交例举:
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user =new User(10,"昙花","12345");
userMapper.insert_user(user);
System.out.println(userMapper.list_user());
//必须要进行提交数据最终才能上传到数据库中!!!!!,可以深究一下,让其自动提交
//这是我写的一个方法,如果不可用,就用下面这两条,自己手动提交!
SqlSessionUtil.CommitClose();
// sqlSession.commit();
// sqlSession.close();
标签:jdbc,mybatis,session,user,提交,mysql,Mybatis
From: https://www.cnblogs.com/chenyuanhang/p/17365718.html