mybatis应用实例学习

MyBatis下载地址: http://code.google.com/p/mybatis/

搭建第一个mybatis应用
创建系统所需数据库

--
--数据库 tb_user
--

drop table if exists tb_user;

create table tb_user(
    id int primary key auto_increment comment '主键',
    username varchar(40) not null unique comment '用户名',
    password varchar(40) not null comment '密码',
    email varchar(40) comment '邮件',
    age int  comment '年龄',
    sex char(2) not null comment '性别'
);

项目结构图:

实体类User

package com.icreate.entity;
/**
 * 
 *
 *  @version : 1.0
 *  
 *  @author  : 苏若年              <a href="mailto:DennisIT@163.com">发送邮件</a>
 *    
 *  @since   : 1.0        创建时间:    2013-4-9    上午11:15:50
 *     
 *  @function: TODO        
 *
 */
public class User {
    
    private int id;
    private String username;
    private String password;
    private String sex;
    private String email;
    private int age;
    
    //getter and setter     
}

 

方案一: 基于配置文件
数据dao接口

package com.icreate.dao;

import java.util.List;

import com.icreate.entity.User;

/**
 * 
 *
 *  @version : 1.0
 *  
 *  @author  : 苏若年              <a href="mailto:DennisIT@163.com">发送邮件</a>
 *    
 *  @since   : 1.0        创建时间:    2013-4-9    上午11:36:34
 *     
 *  @function: TODO        
 *
 */
public interface UserDao {

     /**
      * 新增用户
      * @param user
      * @return
      */
     public int insert(User user);
     
     /**
      * 修改用户
      * @param user
      * @return
      */
     public int update(User user);
    
     /**
      * 删除用户
      * @param userName
      * @return
      */
     public int delete(String userName);
    
     /**
      * 查询所有用户
      * @return
      */
     public List<User> selectAll();
    
     /**
      * 查询数据库中总记录条数
      * @return
      */
     public int countAll();
    
     /**
      * 根据用户名查询用户
      * @param userName
      * @return
      */
     public User findByUserName(String userName);

}

UserDaoMapper.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"> 
<mapper namespace="com.icreate.dao.UserDao">
    <select id="countAll" resultType="int">  <!-- 查询表中记录总数 -->
        select count(*) c from tb_user;
    </select>
    
    <select id="selectAll" resultType="com.icreate.entity.User">    <!-- 查询表中的所有用户 -->
        select * from tb_user order by username asc
    </select>
    
    <insert id="insert" parameterType="com.icreate.entity.User">    <!-- 向数据库中插入用户 -->
        insert into tb_user(username,password,email,sex,age) values(#{username},#{password},#{email},#{sex},#{age})
    </insert>
    
    <update id="update" parameterType="com.icreate.entity.User">     <!-- 更新库中的用户 -->
        update tb_user set username=#{username},password=#{password},email=#{email},sex=#{sex},age=#{age} where username=#{username}
    </update>
    
    <delete id="delete" parameterType="String">    <!-- 删除用户 -->
        delete from tb_user where username=#{username}
    </delete>
    
    <select id="findByUserName" parameterType="String" resultType="com.icreate.entity.User"> <!-- 根据用户名查找用户 -->
        select * from tb_user where username=#{username}
    </select>
</mapper>

 

需要注意的是,这里的id应该与UserDao中定义的方法名相同,sql语句结尾不能用分号
MyBatis-Configuration.xml文件

主测试类

package com.icreate.test;

import java.io.Reader;
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 sun.security.krb5.internal.UDPClient;

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

/**
 * 
 *
 *  @version : 1.0
 *  
 *  @author  : 苏若年              <a href="mailto:DennisIT@163.com">发送邮件</a>
 *    
 *  @since   : 1.0        创建时间:    2013-4-9    上午11:58:03
 *     
 *  @function: TODO        
 *
 */
public class MybatisHandler {

    public static void main(String[] args) throws Exception {
        String resource = "MyBatis-Configuration.xml";    //mybatis配置文件的路径
        Reader reader = Resources.getResourceAsReader(resource);
        SqlSessionFactoryBuilder builfer = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builfer.build(reader);
        
        SqlSession session = factory.openSession();
        UserDao userDao = session.getMapper(UserDao.class);
        
        //创建对象
        User user = new User();
        user.setUsername("苏若年");
        user.setPassword("dennisit");
        user.setEmail("dennisit@163.com");
        user.setSex("男");
        user.setAge(80);
        //增加用户
        //userDao.insert(user);
        
        //查询数据库中记录总数
        System.out.println("数据库中的记录数:" + userDao.countAll());
        
        
        //根据用户名查找
        User usn = userDao.findByUserName("苏若年");
        if(null!=usn){
            System.out.println("根据用户名查找的信息[" +usn.getId() + "," + usn.getUsername() + "," + usn.getEmail()+"]");
        }
        
        //更新用户
        User updUser = new User();
        updUser.setUsername("苏若年"); //更新用户是按照用户名查找,然后更新的.所以要修改的数据前后必须是同一个用户名
        updUser.setEmail("update@163.com");
        updUser.setPassword("update");
        updUser.setAge(20);
        
        userDao.update(updUser);    //执行更新操作
        
        //查询所有用户记录
        List<User> list = userDao.selectAll();
        for(int i=0;i<list.size();i++){
            User us = list.get(i);
            System.out.println("[" + us.getId() + "," + us.getUsername() + "," + us.getEmail()+"]");
        }
        
        userDao.delete("苏若年");
        
        System.out.println("执行删除后数据库中的记录数:" + userDao.countAll());

        session.commit();
    }
}

 

程序运行结果

数据库中的记录数:1
根据用户名查找的信息[1,苏若年,dennisit@163.com]
[1,苏若年,update@163.com]
执行删除后数据库中的记录数:0

 

参考文档: http://www.cnblogs.com/wushiqi54719880/archive/2011/07/26/2117601.html

 

方案二:基于Annotation

数据表与实体类不变,项目结构图

UserDao中使用Annotation

package com.icreate.dao;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import com.icreate.entity.User;

/**
 * 
 *
 *  @version : 1.0
 *  
 *  @author  : 苏若年              <a href="mailto:DennisIT@163.com">发送邮件</a>
 *    
 *  @since   : 1.0        创建时间:    2013-4-9    上午11:36:34
 *     
 *  @function: TODO        
 *
 */
public interface UserDao {

     @Insert("insert into tb_user(username,password,email,sex,age) values(#{username},#{password},#{email},#{sex},#{age})")
     public int insert(User user);
     
     @Update("update tb_user set username=#{username},password=#{password},email=#{email},sex=#{sex},age=#{age} where username=#{username}")
     public int update(User user);
    
     @Delete("delete from tb_user where username=#{username}")
     public int delete(String userName);
    
     @Select("select * from tb_user ")
     public List<User> selectAll();
    
     @Select("select count(*) from tb_user")
     public int countAll();
    
     @Select("select * from tb_user where username=#{username}")
     public User findByUserName(String userName);

}

MyBatis-Configuration.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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/db_mybatis?useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
</configuration>

DBHelper辅助类 

package com.icreate.util;

import java.io.IOException;
import java.io.Reader;

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 com.icreate.dao.UserDao;

/**
 * 
 *
 *  @version : 1.0
 *  
 *  @author  : 苏若年              <a href="mailto:DennisIT@163.com">发送邮件</a>
 *    
 *  @since   : 1.0        创建时间:    2013-4-9    下午02:36:43
 *     
 *  @function: 单例设计模式       
 *
 */
public class DBHelper {

    private static DBHelper dbHelper = new DBHelper();
    
    private  SqlSessionFactory sqlSessionFactory = null;
    
    private DBHelper(){
        try {
            String resource = "MyBatis-Configuration.xml";    //mybatis配置文件的路径
            Reader reader = Resources.getResourceAsReader(resource);
            SqlSessionFactoryBuilder builfer = new SqlSessionFactoryBuilder();
            sqlSessionFactory = builfer.build(reader);
            sqlSessionFactory.getConfiguration().addMapper(UserDao.class);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    public static DBHelper getInstance(){
        return dbHelper;
    }
    
    public SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
    
}

数据操作模拟类

package com.icreate.test;

import java.io.Reader;
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 sun.security.krb5.internal.UDPClient;

import com.icreate.dao.UserDao;
import com.icreate.entity.User;
import com.icreate.util.DBHelper;

/**
 * 
 *
 *  @version : 1.0
 *  
 *  @author  : 苏若年              <a href="mailto:DennisIT@163.com">发送邮件</a>
 *    
 *  @since   : 1.0        创建时间:    2013-4-9    上午11:58:03
 *     
 *  @function: TODO        
 *
 */
public class MybatisHandler {

    public static void main(String[] args) throws Exception {
    
        SqlSession session = DBHelper.getInstance().getSqlSession();
        UserDao userDao = session.getMapper(UserDao.class);
        
        //创建对象
        User user = new User();
        user.setUsername("苏若年");
        user.setPassword("dennisit");
        user.setEmail("dennisit@163.com");
        user.setSex("男");
        user.setAge(80);
        //增加用户
        userDao.insert(user);
        
        //查询数据库中记录总数
        System.out.println("数据库中的记录数:" + userDao.countAll());
        
        
        //根据用户名查找
        User usn = userDao.findByUserName("苏若年");
        if(null!=usn){
            System.out.println("根据用户名查找的信息[" +usn.getId() + "," + usn.getUsername() + "," + usn.getEmail()+"]");
        }
        
        //更新用户
        User updUser = new User();
        updUser.setUsername("苏若年"); //更新用户是按照用户名查找,然后更新的.所以要修改的数据前后必须是同一个用户名
        updUser.setEmail("update@163.com");
        updUser.setPassword("update");
        updUser.setAge(20);
        updUser.setSex("男");
        userDao.update(updUser);    //执行更新操作
        
        //查询所有用户记录
        List<User> list = userDao.selectAll();
        for(int i=0;i<list.size();i++){
            User us = list.get(i);
            System.out.println("[" + us.getId() + "," + us.getUsername() + "," + us.getEmail()+"]");
        }
        
        userDao.delete("苏若年");
        
        System.out.println("执行删除后数据库中的记录数:" + userDao.countAll());

        session.commit();
    }
}

程序运行结果 

数据库中的记录数:1
根据用户名查找的信息[2,苏若年,dennisit@163.com]
[2,苏若年,update@163.com]
执行删除后数据库中的记录数:0

 
参考文档: http://www.cnblogs.com/wushiqi54719880/archive/2011/07/26/2117614.html

在此感谢博友红枫落叶,笔者新接触mybatis,学习时得到落叶文章很大的帮助!

转载请注明出处:[http://www.cnblogs.com/dennisit/archive/2013/04/09/3010801.html]

 

热爱生活,热爱Coding,敢于挑战,用于探索 ...
原文地址:https://www.cnblogs.com/dennisit/p/3010801.html