首页 > 其他分享 >Mybaits基本使用

Mybaits基本使用

时间:2022-10-20 23:14:58浏览次数:52  
标签:基本 String id Mybaits user 使用 import password public

Mybaits基本使用

整体的项目逻辑

image-20221016215327722

第一步:配置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>
<!--
注意:MyBatis核心配置文件中的标签必须要按照指定的顺序配置:
(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)

-->

<!--引入Properties文件,此后就可以在当前文件中使用${key}的方式访问value-->
    <properties resource="jdbc.properties"/>
<!--类型别名
typeAliases:设置类型别名,即为某个具体的类型设置一个别名。
在MyBatis的范围中,就可以使用别名表示一个具体的的类型
-->
    <typeAliases>
            <!--
            type:设置需要起别名的类型
            alias:设置某个类型的别名
            -->
<!--        <typeAlias type="com.wfy.pojo.User" alias="User"></typeAlias>-->
<!--在不设置alias的前提下,其会存在一个默认的别名就是他的实体类类名,并且不区分大小写-->
<!--        <typeAlias type="com.wfy.pojo.User"></typeAlias>-->
<!--通过包设置类型别名,指定包下所有的类型将全部拥有默认的别名,即类名且不区分大小写 -->
        <package name="com.wfy.pojo"/>
    </typeAliases>
<!--配置连接数据库的环境-->
<!--
environments:配置连接数据库的环境
default:设置默认使用的环境的id

-->
    <environments default="development">
<!--
            environment:设置一个具体的连接数据库的环境
            属性:
            id:设置环境的唯一标识,不能重
-->
        <environment id="development">
<!--
         transactionManager:设置事务管理器
                            属性:
                            type:设置事务管理的方式
                            type=“JDBC/MANAGED”
                            JDBC:表示使用JDBC中原生的事务管理方式
                            MANAGED:被管理
-->
            <transactionManager type="JDBC"/>
<!--
       dataSource:设置数据源
       属性:
       type:设置数据源类型
       type=“POOLED/UNPOOLED/JNDI”
       POOLED:表示使用数据库连接池
       UNPOOLED:表示不使用数据库连接池
       JNDI:表示使用上下文中的数据源

-->
            <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>
<!--引入Mybatis的映射文件-->
    <mappers>
<!--        <mapper resource="com/wfy/mapper/UserMapper.xml"/>-->
<!--
以包的方式引入映射文件,但是必须满足两个条件:
1.mapper接口和映射文件所在的包必须保持一致
2.mapper接口的名字和映射文件的名字必须保持一致
-->
        <package name="com.wfy.mapper"/>
    </mappers>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.wfy</groupId>
    <artifactId>mybatis-01-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <packaging>jar</packaging>

    <dependencies>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.11</version>
        </dependency>
<!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
<!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.34</version>
        </dependency>
<!--log4j日志功能-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
<!--mybatis控制台乱码问题的解决方案-->
        <dependency>
            <groupId>org.jboss</groupId>
            <artifactId>jboss-vfs</artifactId>
            <version>3.2.16.Final</version>
        </dependency>

    </dependencies>

</project>

配置log4j日志文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM
        "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration debug="false" >
    <appender name="myConsole" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n"/>
        </layout>
        <!--过滤器设置输出的级别-->
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="levelMin" value="debug" />
            <param name="levelMax" value="warn" />
            <param name="AcceptOnMatch" value="true" />
        </filter>
    </appender>
    <appender name="myFile" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="D:/dubbo/logs/provider/rollingLog/dubbo.log" /><!-- 设置日志输出文件名 -->
        <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
        <param name="Append" value="true" />
        <param name="MaxBackupIndex" value="10" />

        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />
        </layout>
    </appender>

    <appender name="activexAppender" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="D:/dubbo/logs/provider/dailyLog/dubbo.log" />
        <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{MMdd HH:mm:ss SSS\} %-5p] [%t] %c{3\} - %m%n" />
        </layout>
    </appender>
    <!-- 指定logger的设置,additivity指示是否遵循缺省的继承机制-->
    <logger name="com.runway.bssp.activeXdemo" additivity="false">
        <appender-ref ref="activexAppender" />
    </logger>

    <!-- 根logger的设置-->
    <root>
        <priority value ="debug"/>
        <appender-ref ref="myConsole"/>
        <appender-ref ref="myFile"/>
    </root>
</log4j:configuration>

创建数据库,配置0proprties文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm
jdbc.username=root
jdbc.password=root

如果时sql8则需要手动配置时区,不然会报bug

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?serverTime=UTC
jdbc.username=root
jdbc.password=root
/*
 Navicat Premium Data Transfer

 Source Server         : Mybatis
 Source Server Type    : MySQL
 Source Server Version : 50528
 Source Host           : localhost:3306
 Source Schema         : ssm

 Target Server Type    : MySQL
 Target Server Version : 50528
 File Encoding         : 65001

 Date: 16/10/2022 21:45:05
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `username` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `password` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `age` int(10) NOT NULL,
  `gender` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '任凌飞', '123456', 20, '男', '[email protected]');
INSERT INTO `user` VALUES (3, '绫小路清隆', '224466', 20, '男', '[email protected]');
INSERT INTO `user` VALUES (4, '任凌飞', '123456', 20, '男', '[email protected]');

SET FOREIGN_KEY_CHECKS = 1;

第二步:创建实体类和mapper接口

package com.wfy.pojo;

public class User {
    private Integer id;
    private  String username;
    private String password;
    private Integer age;
    private String gender;
    private String email;

    public User() {
    }

    public User(Integer id, String username, String password, Integer age, String gender, String email) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.age = age;
        this.gender = gender;
        this.email = email;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}
package com.wfy.mapper;

import com.wfy.pojo.User;

import java.util.List;

public interface UserMapper {

    int AddUser(User user);

    int UpdateUser(User user);

    int DeleteUser(int id);

    List<User> SelectUser(int id);

    List<User> SelectAllUsers();
}

第三步:在Resources目录下创建mapper的映射文件

通过映射文件实现对数据库的CURD

<?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="com.wfy.mapper.UserMapper">
<!--
mapper接口和映射文件要保证两个一致:
1.mapper接口的全类名和映射文件的namespace保持一致
2.mapper接口中的方法的方法名要和映射文件的sql的id保持一致
-->
    <insert id="AddUser" >
        insert into user values(null,#{username},#{password},#{age},#{gender},#{email})
    </insert>
    <update id="UpdateUser">
        update  user set  username=#{username},password=#{password},age=#{age},email=#{email} where id=#{id}
    </update>
    <delete id="DeleteUser">
        delete from user where id=#{id}
    </delete>
<!--
resultType:设置结果类型,即查询的数据要转换为的java类型
resultMap:自定义映射,处理多对一或一对多的映射文件
-->
    <select id="SelectUser" resultType="User">
        select * from user where id=#{id}
    </select>
    <select id="SelectAllUsers" resultType="User">
        select * from user
    </select>
</mapper>

第四步:代码测试

为了简化注册驱动的代码,编写工具类实现Sqlsession

package com.wfy.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;

public class SqlSessionFactoryUtils {
    public static SqlSession  getSqlSession(){
        SqlSession sqlSession=null;
        try {
            //获取核心配置文件的输入流
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            //获取SqlSessionFactoryBuilder对象
            SqlSessionFactoryBuilder SqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
            //获取SqlSessionFactory对象
            SqlSessionFactory sqlSessionFactory = SqlSessionFactoryBuilder.build(inputStream);
            //获取SqlSession对象
            sqlSession= sqlSessionFactory.openSession(true);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
         return sqlSession;
    }
}

测试代码:

package com.wfy.mybatis.test;

import com.wfy.mapper.UserMapper;
import com.wfy.pojo.User;
import com.wfy.util.SqlSessionFactoryUtils;
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 org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MyBatisTest {

    @Test
    public void AddUserTest() throws IOException {
        //获取核心配置文件的输入流
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        //获取SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder SqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //获取SqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = SqlSessionFactoryBuilder.build(inputStream);
        //获取sql的会话对象SqlSession,SqlSession是Mybatis提供的对数据库的操作对象
       // SqlSession sqlSession = sqlSessionFactory.openSession();
        SqlSession sqlSession = sqlSessionFactory.openSession(true);//自动提交事务
        //获取UserMapper的代理实现类对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //封装对象
        User user = new User();
        String username="任凌飞";
        String password="123456";
        int age=20;
        String gender="男";
        String email="[email protected]";
        user.setUsername(username);
        user.setPassword(password);
        user.setAge(age);
        user.setGender(gender);
        user.setEmail(email);
        //调用mapper接口中的方法,实现添加用户信息的操作
        int i = mapper.AddUser(user);
      //提交事务,关闭资源
      //  sqlSession.commit();
        sqlSession.close();
        if (i>0){
            System.out.println("添加成功~");
        }else {
            System.out.println("添加失败~");
        }

    }

    @Test
    public void UpdateTest(){
        //获取SqlSession
        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
        //获取UserMapper代理实现类对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int id=3;
        User user=new User();
        user.setUsername("绫小路清隆");
        user.setPassword("224466");
        user.setEmail("[email protected]");
        user.setGender("男");
        user.setAge(20);
        user.setId(id);
        int i = mapper.UpdateUser(user);
        sqlSession.close();
       if(i>0){
           System.out.println("更新数据成功~");
       }else {
           System.out.println("更新数据失败~");
       }
    }

    @Test
    public void DeleteUser(){
        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int id=5;
        int i = mapper.DeleteUser(id);
        if (i>0){
            System.out.println("删除成功~");
        }else {
            System.out.println("删除失败~");
        }

    }

    @Test
    public void SelectUser(){
        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int id=1;
        List<User> users = mapper.SelectUser(id);
        for (User user:users
             ) {
            System.out.println(user);
        }
    }

    @Test
    public void SelectAllTest(){
        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = mapper.SelectAllUsers();
        users.forEach(System.out::println);
    }
}

标签:基本,String,id,Mybaits,user,使用,import,password,public
From: https://www.cnblogs.com/wfy-studying/p/16811720.html

相关文章

  • HTML基本标签
    HTML基本标签1.文件开始标签用于表示该文件是以超文本标识语言(HTML)编写,该标签不带有任何属性2.头文件标签表示网页的头部标签,在中定义的元素,并不会放置网页中的任何......
  • firebath数据库常见操作——增删改查使用总结
    firebath数据库常见操作——增删改查使用总结问题背景之前在看一个GitHub上的海外项目用到了Google的实时在线数据库firebath,查看官方文档提供的demo和api介绍感觉相对还......
  • [C#]SourceGenerator实战: 对任意对象使用await吧!!!
    [C#]SourceGenerator实战:对任意对象使用await吧!!!前言本文记录一次简单的SourceGenerator实战,最终实现可以在代码中await任意类型对象,仅供娱乐,请勿在生产环境中使......
  • Spring中Transactional注解使用的心得
    今天看黑马redis的课,里面讲到了一个事务注解不生效的问题。究其原因,就在于Spring中事务注解生效的条件。那么接下来就说一下自己的心得。查了一下资料,就是说如果想让@Tr......
  • 印象笔记的高效使用方式
    印象笔记使用思路:笔记软件很多,能够做笔记的软件也很多,使用每种软件,务必充分发挥其优势才有意义。使用了印象笔记这么久,体会到以下几点:一、充分利用网页裁剪功能。网页裁剪......
  • docker数据卷的使用
    在使用docker时,如果不挂载数据卷直接运行一个容器,在删除容器时会丢失所有新增或修改的数据,并且经常会遇到多个容器需要访问同一份数据的情况,所以我们在运行一个容器时需要......
  • 微信小程序防止事件冒泡(catchtab的使用)
    使用catchtab,在里层可以避免出现事件冒泡     toDetail(){console.log('1')},toDetail2(){console.log('2')},toDetail3(){......
  • 【工具使用】docker(九)docker-compose简介
    定义:用于定义和运行多容器的docker应用程序的工具,通过compose,可以使用yaml文件来配置应用程序的服务。compose的使用一般分3步1、使用dockerfile定义顶用程序的环境......
  • 使用Flask作为项目后端中使用蓝图通过 dotenv 设置环境变量实现需求
    创建蓝图蓝图是一种组织一组相关视图和其他代码的方法。与直接向应用程序注册视图和其他代码的方法不同,蓝图方法是将它们注册到蓝图,然后在工厂函数中将蓝图注册到应用程序......
  • Git使用
    Git概述Git是一个免费的,开源,分布式版本控制系统。Git易于学习,占地小,性能快。性能优于Subversion,CVS等版本控制工具。Git最突出的特性是分支特性。版本控制:版本控制是......