首页 > 其他分享 >Mybatis

Mybatis

时间:2023-04-30 20:11:06浏览次数:29  
标签:jdbc mybatis session user 提交 mysql 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();

标签:jdbc,mybatis,session,user,提交,mysql,Mybatis
From: https://www.cnblogs.com/chenyuanhang/p/17365718.html

相关文章

  • MybatisPlus高级特性之SimpleQuery工具类
    1、是很么?SimpleQuery可以对selectList查询后的结果使用Stream流进行操作,使其可以返回指定的结果,简洁了api的调用2、怎么玩?案例演示(1)list操作/***list(LambdaQueryWrapper<E>wrapper,SFunction<E,A>sFunction,Consumer<E>...peeks)*参数说明:*p......
  • MybatisPlus高级特性之ActiveRecord模式
    1、是什么?ActiveRecord是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表;而模型类的一个实例对应表中的一行记录。ActiveRecord一直广受解释型动态语言(PHP、Ruby等)的喜爱,通过围绕一个数据对象进行CRUD操作。而Java作为准静态(编译型)语言,对于ActiveRec......
  • Mybatis SQL映射文件
    https://blog.csdn.net/sun_soul/article/details/111773947SQL映射文件增删改标签<insertid="insertEmployee">INSERTINTOt_employee(empname,gender,email)VALUES(#{empName},#{gender},#{email})获取自增主键的值让MyBatis自动的将自增的id赋值给传入的employee对象......
  • mybatis Generator生成代码及使用方式
    为什么要有mybatismybatis是一个Java的ORM框架,ORM的出现就是为了简化开发。最初的开发方式是业务逻辑和数据库查询逻辑是分开的,或者在程序中编写sql语句,或者调用sql存储过程。这样导致思维需要在语言逻辑和sql逻辑之间切换,导致开发效率低下。所以出现了一系列的ORM框......
  • Mybatis总体框架设计
    Mybatis架构概览Mybatis架构整体设计如下:接口层和数据库交互的方式Mybatis和数据库的交互方式有两种使用传统的MyBatis提供的API;使用Mapper接口使用传统的MyBatis提供的API这是传统的传递StatementId和查询参数给SqlSession对象,使用SqlSession对象完成和数据库的交......
  • mybatis定义sql语句标签之select 标签
    属性介绍:id:唯一的标识符.和Mapper接口定义方法名同名。parameterType:传给此语句的参数的全路径名或别名例:com.test.poso.User或user,目前很少用到。resultType:语句返回值类型或别名。注意,如果是集合,那么这里填写的是集合的泛型,而不是集合本身(resultType与resultMap不......
  • mybatis定义sql语句标签之insert标签
    这是非常核心的一个标签,CURD是mybatis的核心功能。insert元素相对于select元素要简单很多,mybatis会在插入之后返回一个整数,表示插入成功后插入的条数。真实项目中,使用最多的一个点要注意,在插入过程中返回一些自动主键。因为这个主键,在同一个事务中,还有其它用。例如级联。属性......
  • mybatis控制动态SQL拼接标签之foreach标签
    mybatis控制动态SQL拼接标签之foreach标签foreach标签主要用于构建in条件,可在sql中对集合进行迭代。也常用到批量删除、添加等操作中。这个标签在实际业务中非常常用,当然运维旧项目也会发现,有些坑,用java循环执行sql来表示批量插入。属性说明:collection:collection属性的值有三......
  • eclipse创建一个简单的MyBatis项目
    1.创建一个web应用程序 2.输入项目名称 3.在lib文件夹中添加jar包 4.在src文件夹中创建com.demo.po,com.demo.mapper,com.demo.dao三个包,并创建MyBatis框架配置文件mybatis-config.xml文件,在mapper目录下创建数据实体映射文件CommodityStorageMapper.xml,在po目录下创建名为......
  • MybatisPlus 模糊查询数组中的所有字符串
     List<IcvDevice>deviceList=icvDeviceMapper.selectList(Wrappers.<IcvDevice>query().or(qw->pidList.forEach(sbbh->qw.like("sbbh",sbbh))).eq("sssblx&q......