zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    一个可以代替冗长switch-case的消息分发小框架
    [JCIP笔记](五)JDK并发包
    [JCIP笔记](四)踩在巨人的肩上
    [JCIP笔记] (三)如何设计一个线程安全的对象
    工作两年的五个感想
    [JCIP笔记] (二)当我们谈线程安全时,我们在谈论什么
    [JCIP笔记] (一)多线程的起源
    每天进步一点点------CORDIC (一)
    每天进步一点点------Alpha半透明图形叠加算法Matlab+Verilog实现
    每天进步一点点------Altium Designer Rules规则详解
  • 原文地址:https://www.cnblogs.com/lolau/p/7157904.html
Copyright © 2011-2022 走看看