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都写上!

  • 相关阅读:
    (zhuan) How to Train Neural Networks With Backpropagation
    (转)Introduction to Gradient Descent Algorithm (along with variants) in Machine Learning
    Learning to Compare Image Patches via Convolutional Neural Networks --- Reading Summary
    Unsupervised Image-to-Image Translation Networks --- Reading Writing
    (转) RNN models for image generation
    (zhuan) 126 篇殿堂级深度学习论文分类整理 从入门到应用
    (zhuan) Where can I start with Deep Learning?
    (zhuan) LSTM Neural Network for Time Series Prediction
    (zhuan) awesome-object-proposals
    Face Aging with Conditional Generative Adversarial Network 论文笔记
  • 原文地址:https://www.cnblogs.com/MoooJL/p/13798596.html
Copyright © 2011-2022 走看看