mybatis原始dao开发实现用户的增删改查

原始dao开发方法(程序需要编写dao接口和dao实现类)

搭建mybatis环境和工程结构

java环境:jdk1.7.0_72
eclipse:indigo
mysql:5.1

mybatis运行环境(jar包):
从https://github.com/mybatis/mybatis-3/releases下载,3.2.7版本

mybatis原始dao开发实现用户的增删改查_第1张图片

lib下:依赖包
mybatis-3.2.7.jar:核心 包
mybatis-3.2.7.pdf,操作指南

加入mysql的驱动包

配置日志文件: log4j.properties

mybatis原始dao开发实现用户的增删改查_第2张图片

工程结构

mybatis原始dao开发实现用户的增删改查_第3张图片

配置SqlMapConfig.xml

该文件配置了mybatis的运行环境,数据源,事务等。



<configuration>


    <environments default="development">
        <environment id="development">
        
            <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>
    configuration>

创建po类和编写mybatis映射文件

创建po类

public class User {

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

映射文件

映射文件命名:
User.xml(原始ibatis命名),mapper代理开发映射文件名称叫XXXMapper.xml,比如:UserMapper.xml、ItemsMapper.xml
在映射文件中配置sql语句。
映射文件定义了输入的参数类型和输出的参数类型。




<mapper namespace="test">

    
    
    <select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">
        SELECT * FROM USER WHERE id=#{value}
    select>
    mapper>

加载映射文件

在sqlMapConfig.xml中加载User.xml

.....

    <mappers>
        <mapper resource="sqlmap/User.xml"/>

    mappers>

configuration>

编写程序

根据id查询用户
根据用户名进行模糊查询
添加用户
删除用户和更新用户

完整示例代码如下:


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 org.junit.Test;

import cn.itcast.mybatis.po.User;

/**
 * 
 * 

* Title: MybatisFirst *

*

* Description: 入门程序 *

*

* @version 1.0 */ public class MybatisFirst { // 根据id查询用户信息,得到一条记录结果 @Test public void findUserByIdTest() throws IOException { // mybatis配置文件 String resource = "SqlMapConfig.xml"; // 得到配置文件流 InputStream inputStream = Resources.getResourceAsStream(resource); // 创建会话工厂,传入mybatis的配置文件信息 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); // 通过工厂得到SqlSession SqlSession sqlSession = sqlSessionFactory.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 { // mybatis配置文件 String resource = "SqlMapConfig.xml"; // 得到配置文件流 InputStream inputStream = Resources.getResourceAsStream(resource); // 创建会话工厂,传入mybatis的配置文件信息 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); // 通过工厂得到SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); // list中的user和映射文件中resultType所指定的类型一致 List list = sqlSession.selectList("test.findUserByName", "小明"); System.out.println(list); sqlSession.close(); } // 添加用户信息 @Test public void insertUserTest() throws IOException { // mybatis配置文件 String resource = "SqlMapConfig.xml"; // 得到配置文件流 InputStream inputStream = Resources.getResourceAsStream(resource); // 创建会话工厂,传入mybatis的配置文件信息 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); // 通过工厂得到SqlSession SqlSession sqlSession = sqlSessionFactory.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 { // mybatis配置文件 String resource = "SqlMapConfig.xml"; // 得到配置文件流 InputStream inputStream = Resources.getResourceAsStream(resource); // 创建会话工厂,传入mybatis的配置文件信息 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); // 通过工厂得到SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); // 传入id删除 用户 sqlSession.delete("test.deleteUser", 39); // 提交事务 sqlSession.commit(); // 关闭会话 sqlSession.close(); } // 更新用户信息 @Test public void updateUserTest() throws IOException { // mybatis配置文件 String resource = "SqlMapConfig.xml"; // 得到配置文件流 InputStream inputStream = Resources.getResourceAsStream(resource); // 创建会话工厂,传入mybatis的配置文件信息 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); // 通过工厂得到SqlSession SqlSession sqlSession = sqlSessionFactory.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(); } }

完整的user.xml配置文件如下:





<mapper namespace="test">

    
    
    
    <select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">
        SELECT * FROM USER WHERE id=#{value}
    select>

    
    <select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User">
        SELECT * FROM USER WHERE username LIKE '%${value}%'
    select>

    
    <insert id="insertUser" parameterType="cn.itcast.mybatis.po.User">
        
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
            SELECT LAST_INSERT_ID()
        selectKey>
        insert into user(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})
        
        


    insert>

    
    <delete id="deleteUser" parameterType="java.lang.Integer">
        delete from user where id=#{id}
    delete>

    
    <update id="updateUser" parameterType="cn.itcast.mybatis.po.User">
        update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} 
         where id=#{id}
    update>

mapper>







总结

    parameterType
在映射文件中通过parameterType指定输入 参数的类型。
    resultType
在映射文件中通过resultType指定输出结果的类型。

    #{}和${}

#{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo、hashmap。
如果接收简单类型,#{}中可以写成value或其它名称。
#{}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。

${}表示一个拼接符号,会引用sql注入,所以不建议使用${}${}接收输入参数,类型可以是简单类型,pojo、hashmap。
如果接收简单类型,${}中只能写成value。
${}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。



selectOne和selectList

selectOne表示查询出一条记录进行映射。如果使用selectOne可以实现使用selectList也可以实现(list中只有一个对象)。

selectList表示查询出一个列表(多条记录)进行映射。如果使用selectList查询多条记录,不能使用selectOne。

如果使用selectOne报错:
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 4

你可能感兴趣的:(mybatis原始dao开发实现用户的增删改查)