我讨厌温柔的人.|

AgonySec

园龄:1年10个月粉丝:8关注:2

Mybatis

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文件)

映射文件必须和目标文件同包同名

基本结构如图:

image-20230426161838535

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框架中有些设置帮我进行了提交

image-20230426132258441

提交例举:

 		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();

本文作者:AgonySec

本文链接:https://www.cnblogs.com/agonysec/p/17365718.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   AgonySec  阅读(15)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起