首页 > 其他分享 >Mybatis

Mybatis

时间:2023-04-26 16:59:17浏览次数:33  
标签:jdbc 数据库 mybatis session user 提交 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依赖-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.28</version>
    </dependency>

3.创建jdbc-config.properties文件

将连接数据库的一些配置单独放在一个配置文件中,并把这个配置文件放在resources下

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql:///mybatis?useSSL=false
jdbc.username=填自己数据库账号,例如(root)不用加双引号
jdbc.password=填自己数据库密码,例如(123456)不用加双引号

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,提交,Mybatis
From: https://www.cnblogs.com/chenyuanhang/p/17356574.html

相关文章

  • Mybatis-Plus配置多数据源
    Mybatis-Plus配置多数据源1、引入依赖<dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.0</version></dependency>2、配置多数据源spring:......
  • MybatisPlus-in 超过1000问题
    ------工具类publicstatic<T>List<List<T>>groupingList(List<T>list,intpartSize){List<List<T>>groups=newArrayList();if(list!=null&&!list.isEmpty()){intdataCount=list.size();intgroupCount=......
  • mybatis where标签动态sql问题
    使用where标签注意事项:where标签只会去掉第一个多出来的and和or,使用where标签时要把and放到前面这种情况下生成的SQL更干净,更贴切,不会在任何情况下都有where1=1这样的条件。<selectid="search"resultType="com.example.springweb2.pojo.Member"> selectid,name,a......
  • mybatis与jstl异常汇总
    1,roblemaccessing/moviePlay/goMoviePlay/1/1/1.Reason:  /WEB-INF/views/workdetail.jsp(92,15)PWC6031:Unterminated<c:settagCausedby:org.apache.jasper.JasperException:/WEB-INF/views/workdetail.jsp(92,15)PWC6031:Unt......
  • MyBatis简介和入门
         ......
  • mybatis xml 中 大于、小于、等于 写法
    在*.xml中使用常规的<>=<=>=会与xml的语法存在冲突使用xml原生转义的方式进行转义字符名称字符串符号转义字符大于号>>小于号<<大于等于号>=>=小于等于号<=<=与&&amp;单引号'&apos;双引号""简单代码示例:select*fro......
  • 常用mybatis语法
    接口名与SQL格式List<String>selectByService(@Param("serviceCode")stringCode,@Param("serviceName")stringName);<selectid="selectByService"resultType="java.lang.String"></select>模糊查询likeconcat(&......
  • mybatis-plus只查询部分字段的两种方法
    方法1:只需要查询出name和phone两个字段:使用queryWrapper的select()方法指定要查询的字段publicListselectByWrapper1(){ QueryWrapperqueryWrapper=newQueryWrapper<>(); queryWrapper.select("username");//指定查询某字段 ListsysUsers=sysUserService.list(queryWr......
  • springboot mybatis 动态调用oracle存储过程,通过存储过程名称,就能动态调用存储过程、j
    由于在开发业务时,可能同时调用的存储过程不知道参数,但是参数从界面、或已经存储在数据库的获取,所以就不希望手动写存储过程的参数,通过简化的调用。能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来,这个就通用了。只写一个通用方法,就可以......
  • Mybatis框架原理概览
    好久没有写博客了。最近工作中封装了一个类似ORM框架的东西。大概的原理就是将Excel数据初始化到本地sqlite数据库后,通过json配置文件,对数据库的数据做增删改查等操作。其实大概的思考了下,就是半ORM框架mybatis的逻辑,只是我们自己封装的简陋蛮多。想想有现成的轮子没用,反而是自己......