MyBatis学习总结

  MyBatis 本是apache的一个开源项目iBatis。
  MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
  下面是一个简单的ibatis实例:
  项目目录结构如下:
  目录结构

此项目使用了maven,在pom.xml中定义了jar包依赖,方便管理所需jar包。
pom.xml文件中jar包依赖如下:

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.7</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.8</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.34</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ibatis</groupId>
            <artifactId>ibatis-sqlmap</artifactId>
            <version>2.3.0</version>
        </dependency>
    </dependencies>

此实例使用mysql数据库,数据库表结构如下:
这里写图片描述

实体类 User.java

private int id;
    private String name;
    private int age;
    //seters and geters
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", age = " + age + "]";
    }

UserDao.java

import java.util.List;

import com.entity.User;

public interface UserDao {
    public void insertUser(User user);

    public List<User> selectAllUser();

    public User selectUserById(int id);

    public void deleteUserById(int id);

    public void updateUser(User user);
}

UserDaoImpl.java

import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List;

import org.apache.ibatis.io.Resources;

import com.entity.User;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class UserDaoImpl implements UserDao {

    private static SqlMapClient sqlMapClient = null;
    private List<User> userList;
    private User user;

    //静态块在类加载时会执行
    static {
        try {
            Reader reader = Resources.getResourceAsReader("config/ibatis/SqlMapConfig.xml");
            sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }   
    }
    //插入用户
    public void insertUser(User user) {
        try {
            sqlMapClient.insert("insertUser",user);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
     //查询所有用户
    public List<User> selectAllUser() {
        try {
            userList = sqlMapClient.queryForList("selectAllUser");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return userList;
    }
    //根据id查询用户
    public User selectUserById(int id) {
        try {
            user = (User) sqlMapClient.queryForObject("selectUserById",id);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return user;
    }
    //根据id删除用户
    public void deleteUserById(int id) {
        try {
            sqlMapClient.delete("deleteUserById", id);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    //更新用户
    public void updateUser(User user) {
        try {
            sqlMapClient.update("updateUser", user);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
    <transactionManager type="JDBC">
        <dataSource type="SIMPLE">
            <property name="JDBC.Driver" value="com.mysql.jdbc.Driver" />
            <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/mybatis" />
            <property name="JDBC.Username" value="root" />
            <property name="JDBC.Password" value="" />
        </dataSource>
    </transactionManager>

    <!-- 配置多个实体映射文件 -->
    <sqlMap resource="config/ibatis/user/User.xml" />
</sqlMapConfig>

User.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="USER">
    <typeAlias alias="User" type="com.entity.User" />

    <select id="selectAllUser" resultClass="User">
        select * from users
    </select>

    <select id="selectUserById" parameterClass="int" resultClass="User">
        select * from users where id=#id#
    </select>

    <insert id="insertUser" parameterClass="User">
        insert into users(name,age) values (#name#,#age#)
    </insert>

    <delete id="deleteUserById" parameterClass="int">
        delete from users where id = #id#
    </delete>

    <update id="updateUser" parameterClass="User">
        update users set name = #name#,age = #age# where id = #id#
    </update>
</sqlMap>

测试类:
MyBatisDemoTest.java

package com.test;

import java.util.List;

import org.junit.Test;

import com.dao.UserDao;
import com.dao.UserDaoImpl;
import com.entity.User;

public class MyBatisDemoTest {

    private UserDao userDaoImpl;
    private List<User> userList;
    private User user;

    //测试插入用户
    @Test
    public void testInsertUser() {
        userDaoImpl = new UserDaoImpl();
        user = new User();
        user.setName("marry");
        user.setAge(21);
        userDaoImpl.insertUser(user);
    }

    //测试查询所有用户
    @Test
    public void testSelectAll() {
        userDaoImpl = new UserDaoImpl();
        userList = userDaoImpl.selectAllUser();

        for (User user : userList) {
            System.out.println(user);
        }
    }

    //测试根据id查询用户
    @Test
    public void testSelectUserById() {
        userDaoImpl = new UserDaoImpl();
        user = userDaoImpl.selectUserById(1);

        System.out.println(user);
    }

    //测试根据id删除用户
    @Test
    public void testDeleteUserById() {
        userDaoImpl = new UserDaoImpl();
        userDaoImpl.deleteUserById(4);
    }

    //测试更新用户
    @Test
    public void testUpdateUser() {
        user = new User();
        userDaoImpl = new UserDaoImpl();
        user.setId(2);
        user.setName("jeny");
        user.setAge(30);
        userDaoImpl.updateUser(user);
    }
}

所有方法均测试通过。
代码下载地址:http://download.csdn.net/detail/lg930503/9391075

 

posted on 2016-01-05 16:01  LG一直在努力  阅读(350)  评论(0编辑  收藏  举报

导航