zoukankan      html  css  js  c++  java
  • Mybatis入门(附源码压缩包下载)

     首先,来个项目全景预览,文章尾部附上Demo下载链接

    【1】pom.xml配置(加入jar包)

    <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/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.zyq</groupId>
      <artifactId>test</artifactId>
      <packaging>war</packaging>
      <version>0.0.1-SNAPSHOT</version>
      <name>test Maven Webapp</name>
      <url>http://maven.apache.org</url>
      <dependencies>
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.6</version>
        </dependency>
      </dependencies>
      <build>
        <finalName>test</finalName>
      </build>
    </project>

    【2】创建对象实体User.java

    package com.zyq.entity;
    
    public class User {
    
        private int id;
        private String name;
        private String phone;
    
        public int getId() {
            return id;
        }
    
        public String getName() {
            return name;
        }
    
        public String getPhone() {
            return phone;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setPhone(String phone) {
            this.phone = phone;
        }
    
        @Override
        public String toString() {
            return "User [id=" + id + ", name=" + name + ", phone=" + phone + "]";
        }
    
    }

    【3】创建Dao层接口

    package com.zyq.dao;
    
    import java.util.List;
    
    import com.zyq.entity.User;
    
    public interface UserDao {
    
        /**
         * 获取所有用户
         */
        List<User> getUserList();
    
        /**
         * 获取单个用户
         */
        User getUserById(int id);
    
        /**
         * 添加用户
         */
        void addUser(User user);
    
        /**
         * 更新用户
         */
        void updateUser(User user);
    
        /**
         * 删除单个用户
         */
        void deleteUserById(int id);
    
    }

    【4】mapper.xml配置(每个语句id与Dao层接口名称需要保持一致,parameterType="user" 中的user是取的别名,详见【5】)

    <?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.zyq.dao.UserDao">
        <!-- 查询用户 -->
        <select id="getUserList" resultType="user">
            SELECT * FROM user
        </select>
        <!-- 查询所有用户 -->
        <select id="getUserById" parameterType="int" resultType="user">
            SELECT * FROM user WHERE id = #{id}
        </select>
        <!-- 新增用户 -->
        <insert id="addUser" parameterType="user">
            INSERT INTO user (id, name, phone) VALUES (#{id}, #{name}, #{phone})
        </insert>
        <!-- 修改用户 -->
        <update id="updateUser" parameterType="user">
            UPDATE user SET name=#{name}, phone=#{phone} WHERE id=#{id}
        </update>
        <!-- 删除用户 -->
        <delete id="deleteUserById" parameterType="int">
            DELETE FROM user WHERE id=#{id}
        </delete>
    </mapper>

    【5】mybatis-config.xml配置(主要用于加载数据源信息,特别说明:数据源中的url本来是用&链接,但在xml文件中,需要用转义为&amp;)

    <?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>
        <!-- 别名 -->
        <typeAliases>
            <typeAlias type="com.zyq.entity.User" alias="user"/>
        </typeAliases>
        <!-- 数据源 -->
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"></transactionManager>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=UTC"/>
                    <property name="username" value="root"/>
                    <property name="password" value="zyq123"/>
                </dataSource>
            </environment>
        </environments>
        <!-- 加载mapper文件 -->
        <mappers>
            <mapper resource="mapper.xml"/>
        </mappers>
    </configuration>

    【6】MySessionFactory(创建session,与数据库发生交互)

    package com.zyq.until;
    
    import java.io.InputStream;
    
    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 MySessionFactory {
    
        private static String mybatisResource = "mybatis-config.xml";
        private static SqlSessionFactory sqlSessionFactory;
    
        public static SqlSessionFactory getSqlSessionFactory() throws Exception{
            if (sqlSessionFactory == null) {
                InputStream inputStream = Resources.getResourceAsStream(mybatisResource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            }
            return sqlSessionFactory;
        }
    
        public static SqlSession getSession(){
            try {
                return getSqlSessionFactory().openSession();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
    }

    【7】创建表

    顺便表中首先插入几条数据用于测试

    【8】MybatisTest(测试类。特别说明:这里事务由于回滚,并不会将修改后的数据保存在数据库中)

    package test;
    
    import java.util.List;
    
    import org.apache.ibatis.session.SqlSession;
    import org.junit.Before;
    import org.junit.Test;
    
    import com.zyq.dao.UserDao;
    import com.zyq.entity.User;
    import com.zyq.until.MySessionFactory;
    
    public class MybatisTest {
    
        private SqlSession session;
        private UserDao userDao;
    
        @Before
        public void initSession() {
            session = MySessionFactory.getSession();
            userDao = session.getMapper(UserDao.class);
        }
    
        /**
         * 单元测试 :根据ID查询用户
         */
        @Test
        public void getUserByIdTest(){
            int id = 1;
            User user = userDao.getUserById(id);
            if (user != null) {
                System.out.println(user.toString());
            } else {
                System.out.println("不存在id=" + id + "的用户!");
            }
        }
    
        /**
         * 单元测试 :获取所有用户
         */
        @Test
        public void getUserListTest(){
            List<User> users = userDao.getUserList();
            if (users != null && !users.isEmpty()) {
                for (User user : users) {
                    System.out.println(user.toString());
                }
            } else {
                System.out.println("当前数据库无用户!");
            }
        }
    
        /**
         * 单元测试 :添加用户
         */
        @Test
        public void addUserTest(){
            User user = new User();
            user.setId(101);
            user.setName("诸葛亮");
            user.setPhone("13256565656");
            userDao.addUser(user);
            // 检测新增是否成功
            User check = userDao.getUserById(user.getId());
            session.commit(); // 这一句释放开会提交记录到数据库,注释则不会,下同
            if (check != null) {
                System.out.println("添加成功!");
            } else {
                System.out.println("添加失败!");
            }
        }
    
        /**
         * 单元测试:根据ID修改用户信息
         */
        @Test
        public void updateUserTest(){
            int id = 1;
            User user = userDao.getUserById(id);
            if (user != null) {
                // 这里调用了String.format()方法,不明白的请自行百度
                System.out.println(String.format("存在id=%s的用户:%s", id, user.toString()));
                // 修改内容为在原数据后面加一个"_upd"
                user.setName(user.getName() + "_upd");
                user.setPhone(user.getPhone() + "_upd");
                userDao.updateUser(user);
                session.commit();
                // 修改后查询对比
                User check = userDao.getUserById(id);
                System.out.println("修改后的用户:" + check.toString());
            } else {
                System.out.println(String.format("不存在id=%s的用户!", id));
            }
        }
    
        /**
         * 单元测试:根据ID删除用户
         */
        @Test
        public void deleteUserByIdTest(){
            int id = 1;
            User user = userDao.getUserById(id);
            if (user != null) {
                System.out.println("已存在的用户:" + user.toString());
                userDao.deleteUserById(id);
                session.commit();
                // 检测删除是否成功
                User check = userDao.getUserById(id);
                if (check == null) {
                    System.out.println("删除成功!");
                } else {
                    System.out.println("删除失败!");
                }
            } else {
                System.out.println("不存在id=" + id + "的用户!");
            }
        }
    }

    以上就是一个简单的Mybatis配置及使用过程,

    下面附上项目源码下载地址:提取码【5m26】

    https://pan.baidu.com/s/1YPWeqUZStArXTzy3cKj9gA

    在下载项目导入后你需要注意2点,即可到测试类进行测试:

    (1)到数据库中建立一个user表,并插入几条数据,详见【7】

    (2)修改数据源,如果是本地的话,则只需要修改用户名(username)和密码(password),详见【5】

  • 相关阅读:
    辅助方法、模型、视图数据
    HTML.Label
    HTML辅助方法
    ViewBag与ViewData
    ASP.NET MVC4 View 指定视图
    ASP.NET MVC4 配置逻辑
    大部分基于MVC的Web框架所使用的一些基本原则
    MVC内置的验证属性
    高德地图多点标记自定义地图
    关于数组的去重
  • 原文地址:https://www.cnblogs.com/zhangyuanqiang/p/9107434.html
Copyright © 2011-2022 走看看