MyBatis 详细入门案例

简介:

Mybatis是开源的持久层框架,能够对JDBC访问数据库的过程进行封装,但其并不是完全的ORM(Object Relational Mapping,对象关系映射)。

优点是:

1.简单易学,减少了50%以上的代码量。

2.mybatis框架灵活,SQL语句写在XML文件中,实现了与代码分离,降低了耦合,可重用。

3.可以动态编写SQL语句,包括 if else 等逻辑判断。

劣势

1.SQL语句编写工作量大,对程序员技术有一定要求,具体跟实际业务场景有关系。

2.SQL语句依赖于具体数据库,不能随意更换数据库,否则就得改代码及配置。

适用场景

1.需求变化很多的项目,比如,电商,物联网等,对性能要求高的项目。

以上简单介绍了一下mybatis框架的优劣势及场景,下面直接进入主题吧。

>>>>>>>>>>>>>>>>>>>>>>>>>>>案例开始>>>>>>>>>>>>>>>>>>>>>>>>

工具框架:mybatis(3.5.6)+idea(2019)+junit(4.12)+maven(3.8.3)+mysql(5.7)

1.编写数据库建表语句并执行

CREATE TABLE `user4` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) ,
  `password` varchar(20) ,
  `age` int(11) ,
  PRIMARY KEY (`id`)
)

2.打开IDEA编译工具搭建maven工程

3. 取个项目名

 4.选中maven所在位置

 5.进入项目后,配置src的源码文件

6.在src文件中编辑代码文件结构

6.00  引入jar 包到pom.xml中

<?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>org.example</groupId>
  <artifactId>Mybatis-demo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>Mybatis-demo Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <!--引入mysql jar包-->
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.47</version>
    </dependency>

    <!--引入mybatis jar包-->
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.6</version>
    </dependency>

  <!--引入junit  jar包-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <version>RELEASE</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>

  <build>
    <finalName>Mybatis-demo</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

6.0  SqlMapConfig.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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="User.xml"/>
    </mappers>
</configuration>

6.01  实体类代码

<?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属性,不然会报错,可看做包名-->
<mapper namespace="user">
    <select id="findUserById" parameterType="int" resultType="com.kaka.bean.User">
        select * from user4 where id = #{id}
    </select>
    <select id="findUserAll" resultType="com.kaka.bean.User">
        select * from user4
    </select>
    <insert id="insertUser" parameterType="com.kaka.bean.User">
        insert into user4(username,password,age) values(#{username},#{password},#{age})
    </insert>
    <delete id="deleteUserById" parameterType="int">
        delete from user4 where id=#{id}
    </delete>
    <update id="updateUserPassword" parameterType="com.kaka.bean.User">
        update user4 set password=#{password} where id=#{id}
    </update>
</mapper>

 6.1  实体类

package com.kaka.bean;

/**
 * @Auther: kaka
 * @Date: 2022/02/18/9:52
 * @Description:
 */
public class User {

        private Integer id;
        private String username;
        private String password;

    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;
    }

    private Integer age;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                '}';
    }
}
 

 6.2  DAO实现类代码

package com.kaka.dao.impl;

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

import com.kaka.bean.User;
import com.kaka.dao.UserDao;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

// 实现类
public class UserDaoImpl implements UserDao {

    public User findUserById(int id) throws Exception {
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = factory.openSession();
        //---------------
        User user = session.selectOne("user.findUserById",id); //参数一:namespace.id
        //--------------
        session.close();
        return user;
    }

    public List<User> findAllUsers() throws Exception {
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = factory.openSession();
        //---------------------
        List<User> users = session.selectList("user.findUserAll");
        //----------------------
        session.close();
        return users;
    }

    public void insertUser(User user) throws Exception {
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = factory.openSession();
        //---------------------
        session.insert("user.insertUser", user);
        session.commit();   //增删改,一定一定要加上commit操作
        //----------------------
        session.close();
    }

    public void deleteUserById(int id) throws Exception {
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = factory.openSession();
        //---------------------
        session.delete("user.deleteUserById", id);
        session.commit();   //增删改,一定一定要加上commit操作
        //----------------------
        session.close();
    }

    public void updateUserPassword(User user) throws Exception {
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = factory.openSession();
        //---------------------
        session.update("user.updateUserPassword", user);
        session.commit();   //增删改,一定一定要加上commit操作
        //----------------------
        session.close();
    }
}

6.3  DAO 接口代码

package com.kaka.dao;

import com.kaka.bean.User;

import java.util.List;

/**
 * @Auther: orbbec
 * @Date: 2022/02/18/9:55
 * @Description:
 */

    public interface UserDao {
        public User findUserById(int id) throws Exception ;
        public List<User> findAllUsers() throws Exception;
        public void insertUser(User user) throws Exception;
        public void deleteUserById(int id) throws Exception;
        public void updateUserPassword(User user) throws Exception;
    }

6.4  测试文件代码

package com.kaka.test;

import java.util.List;

import com.kaka.bean.User;
import com.kaka.dao.UserDao;
import com.kaka.dao.impl.UserDaoImpl;
import org.junit.jupiter.api.Test;


public class Test01 {
    @Test
    public void testFindUserById() throws Exception{
        UserDao userDao = new UserDaoImpl();
        User user = userDao.findUserById(7);
        System.out.println(user);
    }
    @Test
    public void testFindAllUser() throws Exception{
        UserDao userDao = new UserDaoImpl();
        List<User> findAllUsers = userDao.findAllUsers();
        for (User user2 : findAllUsers) {
            System.out.println(user2);
        }
    }
    @Test
    public void testInsertUser() throws Exception{
        long starttime = System.currentTimeMillis();
        UserDao userDao = new UserDaoImpl();
        User user = new User();
        for (int i = 0; i <20 ; i++) {
            user.setUsername("张三"+i);
            user.setPassword("lalal"+i);
            user.setAge(i);
            userDao.insertUser(user);
        }
        long endtime = System.currentTimeMillis();
        System.out.println("执行成功,花了"+(endtime-starttime)+"MS");
    }
    @Test
    public void testDeleteUserById() throws Exception{
        UserDao userDao = new UserDaoImpl();
        userDao.deleteUserById(3);
    }
    @Test
    public void testUpdateUserPassword() throws Exception{
        UserDao userDao = new UserDaoImpl();
        User user = new User();
        user.setId(1);
        user.setPassword("newpassword");
        userDao.updateUserPassword(user);
    }
}

6.5  我执行了testInsertUser()这个方法 向表中加了20条数据,运行结果如下,

 6.6 查下数据库有没更新

 恭喜你又学会了一项新技能,温故而知新,是知也。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值