• mybatis 基础详解


    mybatis 是一个开源的 用于对数据库操作的框架, 读者基本都大体了解其基本功能, 我就不多解释了 直接上demo吧。

    我用的是maven管理包, 如下

    <dependencies>
            <dependency>
                <groupId>org.springFramework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>3.2.8.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.40</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.2.8</version>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.12</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
                <version>2.7</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>2.7</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.6.4</version>
            </dependency>
            <dependency>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
                <version>1.1.3</version>
            </dependency>
            <dependency>
                <groupId>cglib</groupId>
                <artifactId>cglib</artifactId>
                <version>2.2.2</version>
            </dependency>
            <dependency>
                <groupId>asm</groupId>
                <artifactId>asm</artifactId>
                <version>3.3.1</version>
            </dependency>
        </dependencies>

    如果不是用的maven管理包, 也可以找下列包进行导入, 一下是javaWeb项目的目录结构,在这里我主要是用maven来做,其实都一样的。

     导好包之后呢,我们就要开始做mybatis项目了。

    -- 1:在src下写入配置文件sqlMapConfig.xml,可以参照下方 

    <!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    
        <!-- 属性定义
        加载一个properties文件
        在 properties标签 中配置属性值
         -->
        <properties resource="db.properties">
            <!-- <property name="" value=""/> -->
        </properties>
        
        <!-- 定义 别名 -->
        <typeAliases>
            <!--
            单个别名的定义
            alias:别名,type:别名映射的类型  -->
            <!-- <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> -->
            <!-- 批量别名定义
            指定包路径,自动扫描包下边的pojo,定义别名,别名默认为类名(首字母小写或大写)
             -->
            <package name="cn.itcast.mybatis.po"/>
            
        </typeAliases>
        
        <!-- 和spring整合后 environments配置将废除-->
        <environments default="development">
            <environment id="development">
            <!-- 使用jdbc事务管理-->
                <transactionManager type="JDBC" />
            <!-- 数据库连接池-->
                <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>
        
        <!--加载mapper映射
        如果将和spring整合后,可以使用整合包中提供的mapper扫描器,此处的mappers不用配置了。
         -->
        <mappers>
            <!-- 通过resource引用mapper的映射文件 -->
            <mapper resource="sqlmap/User.xml" />
            <!-- <mapper resource="mapper/UserMapper.xml" /> -->
            <!-- 通过class引用mapper接口 
            class:配置mapper接口全限定名
            要求:需要mapper.xml和mapper.java同名并且在一个目录 中
            -->
            <!-- <mapper class="cn.itcast.mybatis.mapper.UserMapper"/> -->
            <!-- 批量mapper配置 
            通过package进行自动扫描包下边的mapper接口,
            要求:需要mapper.xml和mapper.java同名并且在一个目录 中
            
            -->
            <package name="cn.itcast.mybatis.mapper"/>
            
            
        </mappers>
        
        
    </configuration>

    -- 2: 配置完sqlMapConfig之后我们就先把实体类弄好吧。  src下创建一个实体类

    import java.util.Date;
    
    public class User {
        private Integer id;
        private String username;
        private String sex;
        private Date birthday;
        private String address;
        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 getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        public Date getBirthday() {
            return birthday;
        }
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
        public String getAddress() {
            return address;
        }
        public void setAddress(String address) {
            this.address = address;
        }
        @Override
        public String toString() {
            return "User [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address="
                    + address + "]";
        }
        
        
    }

    -- 3: 然后我们就开始写映射文件了

    <?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">
    <!-- nameSpace 命名空间为了对sql进行隔离, 方便管理 后面 这个属性值有其他的作用 -->
    <mapper namespace="test">
        <!-- id 唯一标识 标识一个statement 我们将select、 insert... 称为statement #{id} : 标识一个占位符 
            如果#{}要传入一个简单类型(基本类型), {}中的值 任意 parameterType : 是参数的类型 通过#{} 来接受ParamterType输入参数 
            resultType: 结果类型: 指定映射的单条记录 javabean 类型 -->
        <select id="findUserById" parameterType="int"
            resultType="com.weibang.mybatis.beans.User">
            SELECT * FROM user WHERE id=#{id}
        </select>
    
        <!-- 根据用户名模糊称来查询数据 ${} 标识sql的的拼接, 通过这个东西修饰的, 会不加任何修饰拼接在sql中 -->
        <select id="findUserByName" parameterType="String"
            resultType="com.weibang.mybatis.beans.User">
            SELECT * FROM user WHERE username LIKE '%${value}%'
        </select>
    
        <!-- 添加用户 接受简单参数(基本类型)的时候 名字随意, 接受引用类型的时候,名字要与javabean类型一致 -->
        <insert id="InsertUser" parameterType="com.weibang.mybatis.beans.User">
            <!-- 需求: User 对象插入到数据中之后, 新记录的主键要通过User对象返回,通过user获取主键值 里面定义了获取主键的sql, 
                当 Insert语句执行完之后,就会执行selectKey中的东西,就能获取自增的主键 order:用来确定什么时候进行获取主键 两个值, 一个befer 
                一个after keyProperty: 要将主键值付给哪个属性 resultType: SELECT LAST_INSERT_ID() 的结果类型 
                为int 所以填int就可以了 -->
            <selectKey keyProperty="id" order="AFTER" resultType="int">
                SELECT
                LAST_INSERT_ID()
            </selectKey>
            INSERT INTO user (username,birthday,sex,address)
            VALUES(#{username},#{birthday},#{sex},#{address})
        </insert>
        <!-- mysql 的UUID生成主键 <insert id="InsertUser" parameterType="com.weibang.mybatis.beans.User"> 
            <selectKey keyProperty="id" order="AFTER" resultType="String"> SELECT UUID() 
            </selectKey> INSERT INTO user (username,birthday,sex,address) VALUES(#{username},#{birthday},#{sex},#{address}) 
            </insert> -->
        <!-- 用户删除 -->
        <delete id="deleteUser" parameterType="int">
            delete from user where id
            = #{id}
        </delete>
        <!-- 用户更新 要求: 要求传入的user中必须要包括一个id 如果没有id 那么就全部更新了 -->
        <update id="updateUser" parameterType="com.weibang.mybatis.beans.User">
            update user set
            username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}
            where id = #{id}
        </update>
    </mapper>

    -- 4: 映射文件写好了之后, 我们其实就可以进行测试了, 我们这里用的是junit测试

    import java.io.IOException;
    import java.io.InputStream;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    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.Before;
    import org.junit.Test;
    
    import com.weibang.mybatis.beans.User;
    
    public class First_test {
        private SqlSessionFactory sqlsessionFactory;
         
        // 创建会话工厂
        @Before
        public void init() throws IOException {
            // 创建会话工厂
            // 配置文件(sqlMapConfig.xml)
            String resource = "SqlMapConfig.xml";
            // 将配置文件加载到输入流中
            InputStream inputStream = Resources.getResourceAsStream(resource);
            // 创建会话工厂
            sqlsessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }
        
        @Test
        public void testFindById() {
            // 通过sqlsessionFactory来创建sqlsession
            SqlSession sqlsession = sqlsessionFactory.openSession();
            // 第一个参数: statement的位置,等于namespace+statement的ID
            // 第二个参数: 传入的参数
            User user = null;
            try {
                 user= sqlsession.selectOne("test.findUserById", 1);
                
            }catch(Exception e) {
                e.printStackTrace();
            } 
            finally {
                // 关闭sqlsession
                sqlsession.close();
            }
            System.out.println(user);
            
        }
        
        /**测试: 根据名字模糊查询*/
        @Test
        public void testFindByName()throws Exception {
            SqlSession sqlsession = sqlsessionFactory.openSession();
            List<User> user = null;
            try {
                user = sqlsession.selectList("test.findUserByName", "小明");
            }catch(Exception e) {
                e.printStackTrace();
            } 
            finally {
                sqlsession.close();        
                }
            System.out.println(user);
        }
        
        /**
         * mybatis 插入 并且获取插入的主键值
         */
        
        @Test
        public void testInsertUser() {
            SqlSession sqlsession = sqlsessionFactory.openSession();
            User user = new User();
            user.setUsername("kenson2");
            user.setBirthday(new Date());
            user.setSex("1");
            user.setAddress("江西南昌");
            int a = 0;
            try {
                a= sqlsession.insert("test.InsertUser", user);
                
            }catch(Exception e) {
                e.printStackTrace();
            } 
            finally {
                sqlsession.commit();
                sqlsession.close();        
                }
            System.out.println("受影响的行数:"+a);
            System.out.println("返回的主键值 "+user.getId());
        }
        /**
         * 测试  根据id删除用户
         */
        @Test
        public void testDelete() {
            SqlSession sqlsession = sqlsessionFactory.openSession();
            int row=0;
            try {
                row =sqlsession.delete("test.deleteUser", 31);
                sqlsession.commit();
            } catch (Exception e) {
                // TODO: handle exception
            }finally {
                sqlsession.close();
            }
            System.out.println("已经删除的行数:"+row);
        }
        /**
         * 测试更新操作
         */
        @Test
        public void testUpdate() {
            SqlSession sqlsession = sqlsessionFactory.openSession();
            User user = new User();
            user.setId(32);
            user.setUsername("kangcheng");
            user.setBirthday(new Date());
            user.setSex("1");
            user.setAddress("福建");
            int row =0;
            try {
                 row= sqlsession.update("test.updateUser", user);
                 sqlsession.commit();
            } catch (Exception e) {
                // TODO: handle exception
            }finally {
                sqlsession.close();
            }
            System.out.println("已经更新了:"+row+"行");
        }
        
        
    }

    OK  到这里 我们mybatis的简单增删查改就已经完成了, 对了 数据库要自己建表哦。

  • 相关阅读:
    5 -- Hibernate的基本用法 --5 1 持久化类的要求
    5 -- Hibernate的基本用法 --5 深入理解持久化对象
    Java -- POI -- 随笔汇总
    jdk 自带的数据库Derby使用
    SpringMVC中 -- @RequestMapping的作用及用法
    Hibernate -- Dao层 -- CURD -- 随记
    JAVA WEB -- request
    SpringMVC -- @RequestMapping -- 随记
    Navicat -- Oracle -- 错误锦集
    Tomcat -- 启动错误 -- 解决锦集
  • 原文地址:https://www.cnblogs.com/Mr-Kenson/p/8124680.html
Copyright © 2020-2023  润新知