传统的方式写mybatis的应用程序

1、环境搭建

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>web-test-com</groupId>  
    <artifactId>MyBatis</artifactId>  
    <version>0.0.1-SNAPSHOT</version>  
    <packaging>war</packaging>  

    <dependencies>  

        <dependency>  
            <groupId>junit</groupId>  
            <artifactId>junit</artifactId>  
            <version>4.12</version>  
            <scope>provided</scope>  
        </dependency>  

        <dependency>  
            <groupId>log4j</groupId>  
            <artifactId>log4j</artifactId>  
            <version>1.2.17</version>  
        </dependency>  

        <dependency>  
            <groupId>org.mybatis</groupId>  
            <artifactId>mybatis</artifactId>  
            <version>3.1.1</version>  
        </dependency>  
        <dependency>  
            <groupId>mysql</groupId>  
            <artifactId>mysql-connector-java</artifactId>  
            <version>5.1.38</version>  
        </dependency>  

    </dependencies>  
</project>  

2、SqlMappingConfig.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>  

    <!-- 加载属性文件 -->  
    <properties resource="db.properties">  
        <!--properties中还可以配置一些属性名和属性值 -->  
        <!-- <property name="jdbc.driver" value=""/> -->  
    </properties>  

    <!-- 全局配置参数,需要时再设置 -->  
    <!-- <settings> </settings> -->  

    <typeAliases>  
        <!-- 别名定义 -->  
        <!-- 针对单个别名定义 type:类型的路径 alias:别名 -->  
        <!-- <typeAlias type="cn.czy.mybatis.po.User" alias="user"/> -->  
        <typeAlias type="cn.com.czy.mybatis.pojo.User" alias="user" />  
        <!-- 批量别名定义 指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以) -->  
        <package name="cn.com.mybatis.mapper" />  
    </typeAliases>  

    <!-- 和spring整合后 environments配置将废除 -->  
    <environments default="development">  
        <environment id="development">  
            <!-- 使用jdbc事务管理,事务控制由mybatis -->  
            <transactionManager type="JDBC" />  
            <!-- 数据库连接池,由mybatis管理 -->  
            <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>  


    <!-- 加载 映射文件 -->  
    <mappers>  


        <!--通过resource方法一次加载一个映射文件 -->  
        <mapper resource="sqlMapper/user.xml" />  
        <mapper resource="sqlMapper/userMapper.xml" />  
        <mapper resource="sqlMapper/OrdersMapperCustom.xml"/>  

        <!-- 批量加载mapper 指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载 -->  
        <!-- 遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 -->  
        <!-- 中 上边规范的前提是:使用的是mapper代理方法   
        <package name="cn.com.czy.mybatis.two.mapper" />-->  

    </mappers>  

</configuration>  

3、映射文件user.xml(注意在SqlMappingConfig.xml文件中已经引用它)

<?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进行分类化管理,理解sql隔离  -->  
<!-- 注意:使用mapper代理方法开发,namespace有特殊重要的作用 -->  
<mapper namespace="test">  

    <!-- 在 映射文件中配置很多sql语句 -->  
    <!-- 将sql语句封装到mappedStatement对象中,所以将id称为statement的id -->  
    <!-- parameterType:指定输入 参数的类型,这里指定int型 #{}表示一个占位符号 -->  
    <!-- #{id}:其中的id表示接收输入 的参数,参数名称就是id,如果输入 -->  
    <!-- 参数是简单类型,#{}中的参数名可以任意,可以value或其它名称 -->  
    <!-- resultType:指定sql输出结果 的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。 -->  
    <select id="findUserById" parameterType="int"  
        resultType="user">  
        <!-- 需求:通过select执行id查询用户表的记录 -->  
        SELECT * FROM USER WHERE id=#{value}  
    </select>  

    <!-- resultType:指定就是单条记录所映射的java对象类型  -->  
    <!-- ${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中。 使用${}拼接sql,引起 sql注入  -->  
    <!-- ${value}:接收输入 参数的内容,如果传入类型是简单类型,${}中只能使用value -->  
    <!-- 这个mapper文件user对象已经用别名代替 -->  
    <select id="findUserByName" parameterType="java.lang.String"  
        resultType="user">  
        <!-- 根据用户名称模糊查询用户信息,可能返回多条  -->  
        SELECT * FROM USER WHERE username LIKE '%${value}%'  
    </select>  


    <!-- parameterType:指定输入 参数类型是pojo(包括 用户信息)-->   
    <!-- #{}中指定pojo的属性名,接收到pojo对象的属性值,mybatis通过OGNL获取对象的属性值 -->  
    <insert id="insertUser" parameterType="user">  
        <!-- SELECT LAST_INSERT_ID():得到刚insert进去记录的主键值,只适用与自增主键 -->  
        <!-- keyProperty:将查询到主键值设置到parameterType指定的对象的哪个属性 -->  
        <!-- order:SELECT LAST_INSERT_ID()执行顺序,相对于insert语句来说它的执行顺序 -->  
        <!-- resultType:指定SELECT LAST_INSERT_ID()的结果类型 -->  
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">  
            <!-- 将插入数据的主键返回,返回到user对象中 -->  
            SELECT LAST_INSERT_ID()  
        </selectKey>  
        insert into user(username,birthday,sex,address)  
        value(#{username},#{birthday},#{sex},#{address})  
        <!-- 使用mysql的uuid()生成主键 执行过程: -->  
        <!-- 首先通过uuid()得到主键,将主键设置到user对象的id属性中 其次在insert执行时,从user对象中取出id属性值 -->  
        <!-- <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String"> -->  
        <!-- SELECT uuid() </selectKey> insert into user(id,username,birthday,sex,address) -->  
        <!-- value(#{id},#{username},#{birthday},#{sex},#{address}) -->  
    </insert>  


    <delete id="deleteUser" parameterType="java.lang.Integer">  
        <!-- 删除 用户 根据id删除用户,需要输入 id值 -->  
        delete from user where  
        id=#{id}  
    </delete>  


    <!-- 需要传入用户的更新信息 parameterType指定user对象,包括 id和更新信息, -->  
    <!-- 注意:id必须存在 -->  
    <!-- #{id}:从输入 user对象中获取id属性值 -->  
    <update id="updateUser" parameterType="user">  
        <!-- 根据id更新用户 分析: 需要传入用户的id -->  
        update user set  
        username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}  
        where id=#{id}  
    </update>  

</mapper>  

4、pojo类

import java.util.Date;  


/** 
 *  
 * <p>Title: User</p> 
 * <p>Description:用户pojo </p> 
 */  
public class User {  

    //属性名和数据库表的字段对应  
    private int id;  
    private String username;    // 用户姓名  
    private String sex;     // 性别  
    private Date birthday;      // 生日  
    private String address;     // 地址  

    public int getId() {  
        return id;  
    }  
    public void setId(int 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 + "]";  
    }  


}   

5、测试类(传统的不用接口、只是简单的)

import java.io.IOException;  
import java.io.InputStream;  
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 cn.com.czy.mybatis.pojo.User;  
import org.junit.Test;  

/** 
 * 《单表映射》 
 * 入门程序总结:这是简单的mybatis入门程序 
 * -- 1、映射(mapper)文件是user.xml --  --  
 * -- 2、逻辑基本的resultType、parameterType等一下基础知识  --  --  
 * -- 3、SqlSessionFactory、SqlSession的原理  --  --  
 */  
public class MybatisFirst {  

    public SqlSessionFactory getSqlSessionFactory() throws IOException {  
        // mybatis配置文件  
        String resource = "config/SqlMapConfig.xml";  
        // 得到配置文件流  
        InputStream inputStream = Resources.getResourceAsStream(resource);  
        // 创建会话工厂,传入mybatis的配置文件信息  
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);  
        return sqlSessionFactory;  
    }  



    // 根据id查询用户信息,得到一条记录结果  
    @Test  
    public void findUserByIdTest() throws IOException {  

        // 通过工厂得到SqlSession  
        SqlSession sqlSession = this.getSqlSessionFactory().openSession();  

        // 通过SqlSession操作数据库  
        // 第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id  
        // 第二个参数:指定和映射文件中所匹配的parameterType类型的参数  
        // sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象  
        // selectOne查询出一条记录  
        User user = sqlSession.selectOne("test.findUserById", 1);  

        System.out.println(user);  

        // 释放资源  
        sqlSession.close();  

    }  

    // 根据用户名称模糊查询用户列表  
    @Test  
    public void findUserByNameTest() throws IOException {  

        // 通过工厂得到SqlSession  
        SqlSession sqlSession = this.getSqlSessionFactory().openSession();  
        // list中的user和映射文件中resultType所指定的类型一致  
        List<User> list = sqlSession.selectList("test.findUserByName", "小明");  
        System.out.println("信息:" + list);  
        sqlSession.close();  

    }  

    // 添加用户信息  
    @Test  
    public void insertUserTest() throws IOException {  

        // 通过工厂得到SqlSession  
        SqlSession sqlSession = this.getSqlSessionFactory().openSession();  
        // 插入用户对象  
        User user = new User();  
        user.setUsername("王小军");  
        user.setBirthday(new Date());  
        user.setSex("1");  
        user.setAddress("河南郑州");  

        sqlSession.insert("test.insertUser", user);  

        // 提交事务  
        sqlSession.commit();  

        // 获取用户信息主键  
        System.out.println(user.getId());  
        // 关闭会话  
        sqlSession.close();  

    }  

    // 根据id删除 用户信息  
    @Test  
    public void deleteUserTest() throws IOException {  

        // 通过工厂得到SqlSession  
        SqlSession sqlSession = this.getSqlSessionFactory().openSession();  

        // 传入id删除 用户  
        sqlSession.delete("test.deleteUser", 49);  

        // 提交事务  
        sqlSession.commit();  

        // 关闭会话  
        sqlSession.close();  

    }  

    // 更新用户信息  
    @Test  
    public void updateUserTest() throws IOException {  

        // 通过工厂得到SqlSession  
        SqlSession sqlSession = this.getSqlSessionFactory().openSession();  
        // 更新用户信息  

        User user = new User();  
        // 必须设置id  
        user.setId(41);  
        user.setUsername("王大军");  
        user.setBirthday(new Date());  
        user.setSex("2");  
        user.setAddress("河南郑州");  

        sqlSession.update("test.updateUser", user);  

        // 提交事务  
        sqlSession.commit();  

        // 关闭会话  
        sqlSession.close();  

    }  

}  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值