zoukankan      html  css  js  c++  java
  • Maven+Mybatis一些简单例子

    一、创建maven工程

    把依赖的包写在pom.xml中。保存后,工程会有错,需要在工程上右键选择“Maven-->Update Project”

    pom.xml内容为

    <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.mybatis</groupId>
      <artifactId>example</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
      
      <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.3.0</version>
        </dependency>
        
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.12</version>
        </dependency>
        
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.12</version>
        </dependency>
        
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
      </dependencies>
      
      <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
      </build>
    </project>
    pom.xml

    二、简单的例子

    ①创建数据库mybatis,创建表sys_user,sys_role,sys_user_role,并插入数据

    DROP TABLE IF EXISTS `sys_user`;
    CREATE TABLE `sys_user` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户Id',
      `user_name` varchar(50) DEFAULT NULL COMMENT '用户名',
      `user_password` varchar(50) DEFAULT NULL COMMENT '密码',
      `user_email` varchar(50) DEFAULT NULL COMMENT '邮箱',
      `user_info` text COMMENT '简介',
      `head_img` blob COMMENT '头像',
      `create_time` datetime DEFAULT NULL COMMENT '创建时间',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';
    
    INSERT INTO `sys_user` VALUES ('1', 'admin', '123456', 'admin@mybatis.tk', '管理员', null, '2018-11-30 17:00:00');
    INSERT INTO `sys_user` VALUES ('2', 'test', '123456', 'test@mybatis.org', 'test info', 0x7B, '2018-12-05 13:45:45');
    
    --  -----
    
    CREATE TABLE `sys_role` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '角色Id',
      `role_name` varchar(50) DEFAULT NULL COMMENT '用户名',
      `enabled` int(11) DEFAULT NULL COMMENT '有效标识',
      `create_by` bigint(20) DEFAULT NULL COMMENT '创建人',
      `create_time` datetime DEFAULT NULL COMMENT '创建时间',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色表';
    
    INSERT INTO `sys_role` VALUES ('1', '管理员', '1', '1', '2018-11-30 17:05:00');
    INSERT INTO `sys_role` VALUES ('2', '普通用户', '1', '1', '2018-11-30 17:05:01');
    
    -- ------
    
    CREATE TABLE `sys_user_role` (
      `user_id` bigint(20) DEFAULT NULL COMMENT '用户Id',
      `role_id` bigint(20) DEFAULT NULL COMMENT '角色Id'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户角色关联表';
    
    INSERT INTO `sys_user_role` VALUES ('1', '1');
    INSERT INTO `sys_user_role` VALUES ('1', '2');
    INSERT INTO `sys_user_role` VALUES ('1001', '2');
    db.sql

    ②创建mybatis配置文件mybatis-config.xml,位置src/main/resources下

    <?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>
        <settings>
            <setting name="logImpl" value="LOG4J"/>
        </settings>
        <typeAliases>
            <package name="org.mybatis.example.model"/>
        </typeAliases>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC">
                    <property name="" value=""/>
                </transactionManager>
                <dataSource type="UNPOOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                    <property name="username" value="root"/>
                    <property name="password" value="root"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
    <!--         <package name="org.mybatis.example.mapper"/> -->
            <mapper resource="org/mybatis/example/mapper/UserMapper.xml"/>
            <mapper resource="org/mybatis/example/mapper/RoleMapper.xml"/>
        </mappers>
      </configuration>
    mybatis-config.xml

    ③创建model,SysUser,SysRole和SysUserRole,位置src/main/java下,包org.mybatis.example.model

    package org.mybatis.example.model;
    
    import java.util.Date;
    
    public class SysUser {
        
        private Long id;
        private String userName;
        private String userPassword;
        private String userEmail;
        private String userInfo;
        private byte[] headImg;
        private Date createTime;
        public Long getId() {
            return id;
        }
        public void setId(Long id) {
            this.id = id;
        }
        public String getUserName() {
            return userName;
        }
        public void setUserName(String userName) {
            this.userName = userName;
        }
        public String getUserPassword() {
            return userPassword;
        }
        public void setUserPassword(String userPassword) {
            this.userPassword = userPassword;
        }
        public String getUserEmail() {
            return userEmail;
        }
        public void setUserEmail(String userEmail) {
            this.userEmail = userEmail;
        }
        public String getUserInfo() {
            return userInfo;
        }
        public void setUserInfo(String userInfo) {
            this.userInfo = userInfo;
        }
        public byte[] getHeadImg() {
            return headImg;
        }
        public void setHeadImg(byte[] headImg) {
            this.headImg = headImg;
        }
        public Date getCreateTime() {
            return createTime;
        }
        public void setCreateTime(Date createTime) {
            this.createTime = createTime;
        }
        
        
    
    }
    SysUser.java
    package org.mybatis.example.model;
    
    import java.util.Date;
    
    public class SysRole {
    
        private Long id;
        private String roleName;
        private int enabled;
        private Long createBy;
        private Date createTime;
        public Long getId() {
            return id;
        }
        public void setId(Long id) {
            this.id = id;
        }
        public String getRoleName() {
            return roleName;
        }
        public void setRoleName(String roleName) {
            this.roleName = roleName;
        }
        public int getEnabled() {
            return enabled;
        }
        public void setEnabled(int enabled) {
            this.enabled = enabled;
        }
        public Long getCreateBy() {
            return createBy;
        }
        public void setCreateBy(Long createBy) {
            this.createBy = createBy;
        }
        public Date getCreateTime() {
            return createTime;
        }
        public void setCreateTime(Date createTime) {
            this.createTime = createTime;
        }
        
        
        
    }
    SysRole.java
    package org.mybatis.example.model;
    
    public class SysUserRole {
    
        private Long userId;
        private Long roleId;
        public Long getUserId() {
            return userId;
        }
        public void setUserId(Long userId) {
            this.userId = userId;
        }
        public Long getRoleId() {
            return roleId;
        }
        public void setRoleId(Long roleId) {
            this.roleId = roleId;
        }
        
        
    }
    SysUserRole.java

    ④创建映射的xml文件,UserMapper.xml,位置src/main/resources/org/mybatis/example/mapper下

    <?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="org.mybatis.example.mapper.UserMapper">
            
            <select id="selectUserById" resultMap="selectUserMap">
                select * from sys_user where id = #{id}
            </select>
            
            <resultMap type="org.mybatis.example.model.SysUser" id="selectUserMap">
                <id property="id" column="id" />
                <result property="userName" column="user_name"/>
                <result property="userPassword" column="user_password"/>
                <result property="userEmail" column="user_email"/>
                <result property="userInfo" column="user_info"/>
                <result property="headImg" column="head_img" jdbcType="BLOB"/>
                <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
            </resultMap>
            
        </mapper>
    UserMapper.xml

    ⑤创建Mapper的接口,UserMapper.java,位置src/main/java下,包org.mybatis.example.mapper

    package org.mybatis.example.mapper;
    
    import org.mybatis.example.model.SysUser;
    
    public interface UserMapper {
    
        SysUser selectUserById(Long id);
    
    }
    UserMapper.java

    ⑥创建测试程序,TestSelectMapper.java,位置src/main/java下,包org.mybatis.example.app

    package org.mybatis.example.app;
    
    import java.io.IOException;
    import java.io.Reader;
    import java.util.List;
    
    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.BeforeClass;
    import org.junit.Test;
    import org.mybatis.example.mapper.RoleMapper;
    import org.mybatis.example.mapper.UserMapper;
    import org.mybatis.example.model.SysRole;
    import org.mybatis.example.model.SysUser;
    
    import junit.framework.Assert;
    
    public class TestSelectMapper {
    
        private static SqlSessionFactory sqlSessionFactory;
        
        @BeforeClass
        public static void init() {
            try {
                Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        @Test
        public void testSelectUserById() {
            SqlSession sqlSession = sqlSessionFactory.openSession();
            try {
                UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
                SysUser sysUser = userMapper.selectUserById(1L);
                Assert.assertNotNull(sysUser);
                Assert.assertEquals("admin", sysUser.getUserName());
                System.out.println(sysUser.toString());
            } finally {
                sqlSession.close();
            }
        }
    }
    TestSelectMapper.java

    三、综合增删改查

    <?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="org.mybatis.example.mapper.UserMapper">
            
            <select id="selectUserById" resultMap="selectUserMap">
                select * from sys_user where id = #{id}
            </select>
            
            <resultMap type="org.mybatis.example.model.SysUser" id="selectUserMap">
                <id property="id" column="id" />
                <result property="userName" column="user_name"/>
                <result property="userPassword" column="user_password"/>
                <result property="userEmail" column="user_email"/>
                <result property="userInfo" column="user_info"/>
                <result property="headImg" column="head_img" jdbcType="BLOB"/>
                <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
            </resultMap>
            
            <select id="selectAllUsers" resultType="org.mybatis.example.model.SysUser">
                select user_name userName, user_password userPassword,
                    user_email userEmail, user_info userInfo,
                    user_info userInfo, head_img headImg,
                    create_time createTime from sys_user
            </select>
            
            <insert id="insertAUser">
                insert into sys_user (id, user_name, user_password, user_email, user_info, head_img, create_time) values 
                (#{id}, #{userName}, #{userPassword}, #{userEmail}, #{userInfo}, #{headImg, jdbcType=BLOB}, 
                #{createTime, jdbcType=TIMESTAMP})
            </insert>
            
            <insert id="insertAUserWithoutId" useGeneratedKeys="true" keyProperty="id">
                insert into sys_user (user_name, user_password, user_email, user_info, head_img, create_time) values 
                (#{userName}, #{userPassword}, #{userEmail}, #{userInfo}, #{headImg, jdbcType=BLOB}, #{createTime, jdbcType=TIMESTAMP})
            </insert>
            
            <update id="updateAUser">
                update sys_user set 
                    user_name = #{userName},
                    user_email = #{userEmail},
                    user_info = #{userInfo},
                    create_time = #{createTime, jdbcType=TIMESTAMP}
                where id = #{id}
            </update>
            
            <delete id="deleteAUser">
                delete from sys_user where id = #{id}
            </delete>
            
        </mapper>
    UserMapper.xml
    package org.mybatis.example.mapper;
    
    import java.util.List;
    
    import org.mybatis.example.model.SysUser;
    
    public interface UserMapper {
    
        SysUser selectUserById(Long id);
        List<SysUser> selectAllUsers();
        
        int insertAUser(SysUser sysUser);
        int insertAUserWithoutId(SysUser sysUser);
        
        int updateAUser(SysUser sysUser);
        int deleteAUser(Long id);
    }
    UserMapper.java
    <?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="org.mybatis.example.mapper.RoleMapper">
        <select id="selectRolesByUserId" resultType="org.mybatis.example.model.SysRole">
            select r.id, 
                   r.role_name roleName, 
                   r.enabled, 
                   r.create_by createBy, 
                   r.create_time createTime
            from sys_user u
            inner join sys_user_role ur on u.id = ur.user_id
            inner join sys_role r on r.id = ur.role_id
            where u.id = #{userId}
        </select>
        
        <select id="selectRolesByUserIdAndRoleEnabled" resultType="org.mybatis.example.model.SysRole">
            select r.id,
                   r.role_name roleName,
                   r.enabled,
                   r.create_by createBy,
                   r.create_time createTime
            from sys_user u
            inner join sys_user_role ur on u.id = ur.user_id
            inner join sys_role r on r.id = ur.role_id
            where u.id = #{userId} and r.enabled = #{enabled}
        </select>
      </mapper>
    RoleMapper.xml
    package org.mybatis.example.mapper;
    
    import java.util.List;
    
    import org.apache.ibatis.annotations.Param;
    import org.mybatis.example.model.SysRole;
    
    public interface RoleMapper {
    
        List<SysRole> selectRolesByUserId(Long id);
        List<SysRole> selectRolesByUserIdAndRoleEnabled(
                @Param("userId") Long userId, 
                @Param("enabled") int enabled);
    }
    RoleMapper.java
    package org.mybatis.example.app;
    
    import java.io.IOException;
    import java.io.Reader;
    import java.util.List;
    
    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.BeforeClass;
    import org.junit.Test;
    import org.mybatis.example.mapper.RoleMapper;
    import org.mybatis.example.mapper.UserMapper;
    import org.mybatis.example.model.SysRole;
    import org.mybatis.example.model.SysUser;
    
    import junit.framework.Assert;
    
    public class TestSelectMapper {
    
        private static SqlSessionFactory sqlSessionFactory;
        
        @BeforeClass
        public static void init() {
            try {
                Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        @Test
        public void testSelectUserById() {
            SqlSession sqlSession = sqlSessionFactory.openSession();
            try {
                UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
                SysUser sysUser = userMapper.selectUserById(1L);
                Assert.assertNotNull(sysUser);
                Assert.assertEquals("admin", sysUser.getUserName());
                System.out.println(sysUser.toString());
            } finally {
                sqlSession.close();
            }
        }
        
        @Test
        public void testSelectAllUsers() {
            SqlSession sqlSession = sqlSessionFactory.openSession();
            try {
                UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
                List<SysUser> sysUserList = userMapper.selectAllUsers();
                Assert.assertNotNull(sysUserList);
                Assert.assertTrue(sysUserList.size() > 0);
                System.out.println(sysUserList.size());
            } finally {
                sqlSession.close();
            }
        }
        
        @Test
        public void testSelectRolesByUserId() {
            SqlSession sqlSession = sqlSessionFactory.openSession();
            try {
                RoleMapper rolerMapper = sqlSession.getMapper(RoleMapper.class);
                List<SysRole> sysRoleList = rolerMapper.selectRolesByUserId(1L);
                Assert.assertNotNull(sysRoleList);
                Assert.assertTrue(sysRoleList.size() > 0);
                System.out.println(sysRoleList.size());
            } finally {
                sqlSession.close();
            }
        }
        
    }
    TestSelectMapper.java
    package org.mybatis.example.app;
    
    import java.io.IOException;
    import java.io.Reader;
    import java.util.Date;
    
    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.BeforeClass;
    import org.junit.Test;
    import org.mybatis.example.mapper.UserMapper;
    import org.mybatis.example.model.SysUser;
    
    public class TestInsertMapper {
    
        private static SqlSessionFactory sqlSessionFactory;
        
        @BeforeClass
        public static void init() {
            try {
                Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        @Test
        public void testInsertAUser() {
            SqlSession sqlSession = sqlSessionFactory.openSession();
            try {
                UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
                SysUser sysUser = new SysUser();
                sysUser.setId(2L);
                sysUser.setUserName("test");
                sysUser.setUserPassword("123456");
                sysUser.setUserEmail("test@mybatis.org");
                sysUser.setUserInfo("test info");
                sysUser.setHeadImg(new byte[] {123});
                sysUser.setCreateTime(new Date());
                int insertResult = userMapper.insertAUser(sysUser);
                System.out.println(insertResult);
            } finally {
                //sqlSession.rollback();
                sqlSession.commit();
                sqlSession.close();
            }
        }
        
        @Test
        public void testInsertAUserWithoutId() {
            SqlSession sqlSession = sqlSessionFactory.openSession();
            try {
                UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
                SysUser sysUser = new SysUser();
                sysUser.setUserName("test3");
                sysUser.setUserPassword("123456");
                sysUser.setUserEmail("test3@mybatis.org");
                sysUser.setUserInfo("test3 info");
                sysUser.setCreateTime(new Date());
                int insertResult = userMapper.insertAUser(sysUser);
                System.out.println(insertResult);
            } finally {
                //sqlSession.rollback();
                sqlSession.commit();
                sqlSession.close();
            }
        }
        
        @Test
        public void testUpdateAUser() {
            SqlSession sqlSession = sqlSessionFactory.openSession();
            try {
                UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
                SysUser selectUser = userMapper.selectUserById(1003L);
                selectUser.setUserName("test1003");
                selectUser.setUserEmail("test1003@mybatis.org");
                selectUser.setUserInfo("test1003 info");
                selectUser.setCreateTime(new Date());
                int updateResult = userMapper.updateAUser(selectUser);
                System.out.println(updateResult);
            } finally {
                sqlSession.commit();
                sqlSession.close();
            }
        }
        
        @Test
        public void testDeleteAUser() {
            SqlSession sqlSession = sqlSessionFactory.openSession();
            try {
                UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
                int deleteResult = userMapper.deleteAUser(1003L);
                System.out.println(deleteResult);
            } finally {
                sqlSession.commit();
                sqlSession.close();
            }
        }
    }
    TestInsertMapper.java
    package org.mybatis.example.app;
    
    import java.io.IOException;
    import java.io.Reader;
    import java.util.List;
    
    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.BeforeClass;
    import org.junit.Test;
    import org.mybatis.example.mapper.RoleMapper;
    import org.mybatis.example.model.SysRole;
    
    public class TestParamMapper {
    
        private static SqlSessionFactory sqlSessionFactory;
        
        @BeforeClass
        public static void init() {
            try {
                Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        @Test
        public void testComplicatedSelect() {
            SqlSession sqlSession = sqlSessionFactory.openSession();
            try {
                RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
                List<SysRole> sysRoleList = roleMapper.selectRolesByUserIdAndRoleEnabled(1L, 1);
                System.out.println(sysRoleList.size());
            } finally {
                sqlSession.close();
            }
        }
    }
    TestParamMapper.java

    当需要传递多个参数的时候,需要用到@Param注解,并且上面的代码中给出了例子:RoleMapper.xml中的SelectRolesByUserIdAndRoleEnabled

    需要注意的是,在Mapper.xml中,<mapper>中的属性namespace不能少,之前在学习的过程由于缺少了namespace,导致没有得到正确的结果,排查了半天,才找到原因

    四、架构图

  • 相关阅读:
    Quicksum -SilverN
    uva 140 bandwidth (好题) ——yhx
    uva 129 krypton factors ——yhx
    uva 524 prime ring problem——yhx
    uva 10976 fractions again(水题)——yhx
    uva 11059 maximum product(水题)——yhx
    uva 725 division(水题)——yhx
    uva 11853 paintball(好题)——yhx
    uva 1599 ideal path(好题)——yhx
    uva 1572 self-assembly ——yhx
  • 原文地址:https://www.cnblogs.com/miantiaoandrew/p/10071174.html
Copyright © 2011-2022 走看看