zoukankan      html  css  js  c++  java
  • mybatis知识点总结01

    1 什么是mybatis?
    MyBatis 是一款优秀的持久层框架

    MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程

    MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象】映射成数据库中的记录。

    Mybatis官方文档 : http://www.mybatis.org/mybatis-3/zh/index.html
    2 mybatis的第一个程序
    2.1 搭建环境
    2.1.1 项目结构

    2.1.2 pom文件添加依赖

    <dependencies>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
    <!--MySQL驱动-->
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.16</version>
    </dependency>
    <!--mybatis-->
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.2</version>
    </dependency>
    <!--日志-->
    <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
    </dependency>
    <!--实体类偷懒-->
    <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.10</version>
    </dependency>
    </dependencies>
    <build>
    <!--引入配置文件-->
    <resources>
    <resource>
    <directory>src/main/resources</directory>
    <includes>
    <include>**/*.properties</include>
    <include>**/*.xml</include>
    </includes>
    <filtering>true</filtering>
    </resource>
    <resource>
    <directory>src/main/java</directory>
    <includes>
    <include>**/*.properties</include>
    <include>**/*.xml</include>
    </includes>
    <filtering>true</filtering>
    </resource>
    </resources>
    </build>

    2.1.3 编写MyBatis核心配置文件
    2.1.3.1 mybatis-config.xml

    <?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="db.properties">
    <!-- <property name="username" value="root"/>-->
    </properties>
    <settings>


    <!--标准日志工厂-->

    <!-- <setting name="logImpl" value="STDOUT_LOGGING"/>-->
    <setting name="logImpl" value="LOG4J"/>
    
    </settings>

    <!--实体类起别名-->

    <typeAliases>
    <package name="bean"/>
    <!-- <typeAlias type="com.bean.User" alias="User"></typeAlias>-->
    </typeAliases>
    <environments default="development">
    <environment id="development">
    <transactionManager type="JDBC"/>
    <dataSource type="POOLED">
    <property name="driver" value="${driver}"/>
    <property name="url" value="${url}"/>
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>
    </dataSource>
    </environment>
    </environments>


    <!-- 使用相对于类路径的资源引用 -->

    <mappers>
    <mapper resource="dao/UserMapper.xml"/>
    </mappers>
    </configuration>


    2.1.3.2 db.properties

    driver=com.mysql.cj.jdbc.Driver
    url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useSSL=true&useUnicode=true&characterEncoding=UTF-8
    username=root
    password=123456


    2.1.3.3 log4j-properties
    #将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码

    log4j.rootLogger=DEBUG,console,file

    #控制台输出的相关设置

    log4j.appender.console = org.apache.log4j.ConsoleAppender
    log4j.appender.console.Target = System.out
    log4j.appender.console.Threshold=DEBUG
    log4j.appender.console.layout = org.apache.log4j.PatternLayout
    log4j.appender.console.layout.ConversionPattern=[%c]-%m%n

    #文件输出的相关设置

    log4j.appender.file = org.apache.log4j.RollingFileAppender
    log4j.appender.file.File=./log/log.log
    log4j.appender.file.MaxFileSize=10mb
    log4j.appender.file.Threshold=DEBUG
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n

    #日志输出级别

    log4j.logger.org.mybatis=DEBUG
    log4j.logger.java.sql=DEBUG
    log4j.logger.java.sql.Statement=DEBUG
    log4j.logger.java.sql.ResultSet=DEBUG
    log4j.logger.java.sql.PreparedStatement=DEBUG


    2.1.4 编写MyBatis工具类 MyBatisUtils.java

    package util;
    
    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.IOException;
    import java.io.InputStream;
    
    /**
    * @author MoooJL
    * @data 2020/9/22-20:42
    */
    public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    
    static {
    
    try {
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    
    public static SqlSession getSqlSession(){
    SqlSession sqlSession = sqlSessionFactory.openSession();
    return sqlSession;
    }
    }

    2.2 编写代码
    2.2.1 创建实体类

    public class User {
    
    private int id; //id
    private String name; //姓名
    private String pwd; //密码
    
    //构造,有参,无参
    //set/get
    //toString()
    
    }


    2.2.3 编写mapper接口类

    public interface UserMapper {
    //查询全部用户
    List<User> selectUser();
    //根据id查询用户
    User selectUserById(int id);
    //添加一个用户
    int addUser(User user);
    //修改一个用户
    int updateUser(User user);
    //根据id删除用户
    int deleteUser(int id);
    }


    2.2.4 在UserMapper.xml文件插入相关SQL语句 附模糊查询格式

    <?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">
    <mapper namespace="dao.UserMapper">
    <select id="selectUser" resultType="user">
    select * from mybatis.user
    </select>
    <select id="selectUserById" resultType="user" parameterType="int">
    select * from mybatis.user where id=#{id}
    </select>
    <insert id="addUser" parameterType="user">
    insert into mybatis.user (name,password) values(#{name},#{password})
    </insert>
    <update id="updateUser" parameterType="user">
    update mybatis.user set name=#{name} ,password=#{password} where id=#{id}
    </update>
    <delete id="deleteUser" parameterType="int">
    delete from mybatis.user where id=#{id}
    </delete>
    </mapper>
    <select id=”selectlike”>
    select * from user where bar like "%"#{value}"%"
    </select>


    2.2.5 编写测试代码

    @Test
    public void tsetSelectUserById() {
    SqlSession session = MybatisUtils.getSession(); //获取SqlSession连接
    UserMapper mapper = session.getMapper(UserMapper.class);
    User user = mapper.selectUserById(1);
    System.out.println(user);
    session.close();
    }
    
    @Test
    public void testAddUser() {
    SqlSession session = MybatisUtils.getSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    User user = new User(5,"王五","zxcvbn");
    int i = mapper.addUser(user);
    System.out.println(i);
    session.commit(); //提交事务,重点!不写的话不会提交到数据库
    session.close();
    }
    
    @Test
    public void testUpdateUser() {
    SqlSession session = MybatisUtils.getSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    User user = mapper.selectUserById(1);
    user.setPwd("asdfgh");
    int i = mapper.updateUser(user);
    System.out.println(i);
    session.commit(); //提交事务,重点!不写的话不会提交到数据库
    session.close();
    }
    
    @Test
    public void testDeleteUser() {
    SqlSession session = MybatisUtils.getSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    int i = mapper.deleteUser(5);
    System.out.println(i);
    session.commit(); //提交事务,重点!不写的话不会提交到数据库
    session.close();
    }

    2.3 总结
    所有的增删改操作都需要提交事务!

    接口所有的普通参数,尽量都写上@Param参数,尤其是多个参数时,必须写上!

    有时候根据业务的需求,可以考虑使用map传递参数!

    为了规范操作,在SQL的配置文件中,我们尽量将Parameter参数和resultType都写上!

  • 相关阅读:
    企业移动视频通话会议EasyRTC视频会议通话系统开拓视频会议行业新前景
    安防网络摄像头海康大华硬盘录像机视频流媒体服务器EasyNVR调用接口时提示未授权问题解决方案
    安防RTSP_Onvif网络摄像头互联网直播视频流媒体服务器在使用过程中如何保存用户登录时的信息
    RTSP、RTMP、HTTP-FLV、 HLS安防网络摄像头互联网直播音视频流媒体服务器EasyNVR如何实现密码的MD5加密
    安防RTSP_Onvif网络摄像头互联网直播视频流媒体服务器EasyNVR如何解决视频流Ajax跨域访问的问题
    Python之网路编程利用threading模块开线程
    Python之网路编程之线程介绍
    Python之网路编程之进程池及回调函数
    Python之网路编程之-互斥锁与进程间的通信(IPC)及生产者消费者模型
    Python之网路编程利用multiprocessing开进程
  • 原文地址:https://www.cnblogs.com/dazhi151/p/13800122.html
Copyright © 2011-2022 走看看