MyBatis的Mapper代理开发方式的简单使用

  今天下午在练习使用MyBatis,它的原始Dao的开发方式与Mapper代理开发方式都简单的使用了一下,特以此文记录Mapper代理开发的使用。

  数据库使用的是MySql,数据连接池用的DBCP,为了能更好的看到log使用了log4j,使用到的jar包如下:

MyBatis的Mapper代理开发方式的简单使用_第1张图片


  整体工程的文件结构如下:

MyBatis的Mapper代理开发方式的简单使用_第2张图片


  由于MyBatis不能使用外部连接池,因此需要自定义一个数据源工厂,我同时将获取sqlSession也写在了DBCPUtil.java中了,其内容如下:

package com.example.util;


import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;


import javax.sql.DataSource;


import org.apache.commons.dbcp.BasicDataSource;
import org.apache.ibatis.datasource.DataSourceFactory;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


/**
 * 用于返回DBCP的dataSource(数据源)的工具类
 * 
 * @author wang
 */
public class DBCPUtil implements DataSourceFactory {


private BasicDataSource dataSource = null;


public DBCPUtil() {
dataSource = new BasicDataSource();
}


@Override
public DataSource getDataSource() {
return dataSource;
}


@Override
public void setProperties(Properties ps) {
dataSource.setDriverClassName(ps.getProperty("driver"));
dataSource.setUrl(ps.getProperty("url"));
dataSource.setUsername(ps.getProperty("username"));
dataSource.setPassword(ps.getProperty("password"));
// 是否默认自动提交回滚
dataSource.setDefaultAutoCommit(ps.getProperty("defaultAutoCommit", "0").equals("1"));
dataSource.setInitialSize(Integer.parseInt(ps.getProperty("initialsize", "2")));
dataSource.setMaxActive(Integer.parseInt(ps.getProperty("maxactive", "20")));
dataSource.setMaxIdle(Integer.parseInt(ps.getProperty("maxidle", "0")));
dataSource.setMaxWait(Long.parseLong(ps.getProperty("maxwait", "0")));
}


public static SqlSession getSqlSession() {
String resource = "SqlMapConfig.xml";
try {
InputStream in = Resources.getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
return factory.openSession();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}


  需要在配置文件中对自定义的连接池进行配置,如下:

MyBatis的Mapper代理开发方式的简单使用_第3张图片


  剩下的也就比较简单了,一带而过吧,UserMapper.java如下:

public interface UserMapper {


public void add(User user);


public void delete(Integer id);


public void update(User user);


public User find(Integer id);
}


  UserMapper.xml内容如下,修改了自动生成的xml文件:














    id, username, password, nickname, email, phone, city, create_date, update_date



    delete from t_user
    where id = #{id,jdbcType=INTEGER}


    insert into t_user (id, username, password, 
      nickname, email, phone, 
      city, create_date, update_date)
    values (#{id,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, 
      #{nickname,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR}, 
      #{city,jdbcType=VARCHAR}, #{createDate,jdbcType=TIMESTAMP}, #{updateDate,jdbcType=TIMESTAMP})


    update t_user
    set username = #{username,jdbcType=VARCHAR},
      password = #{password,jdbcType=VARCHAR},
      nickname = #{nickname,jdbcType=VARCHAR},
      email = #{email,jdbcType=VARCHAR},
      phone = #{phone,jdbcType=VARCHAR},
      city = #{city,jdbcType=VARCHAR},
      create_date = #{createDate,jdbcType=TIMESTAMP},
      update_date = #{updateDate,jdbcType=TIMESTAMP}
    where id = #{id,jdbcType=INTEGER}


  最后是使用了Junit进行测试的测试文件,TestMapper.java,其内容如下:

public class TestMapper {


private SqlSession sqlSession = null;
private UserMapper userMapper;


@Before
public void setUp() {
sqlSession = DBCPUtil.getSqlSession();
userMapper = sqlSession.getMapper(UserMapper.class);
}


@Test
public void TestFind() {
User user = userMapper.find(6);
System.out.println(user);
}


@Test
public void TestAdd() {
User user = new User();
user.setCity("唐山");
user.setCreateDate(new Date());
user.setEmail("[email protected]");
user.setNickname("你");
user.setPassword("1235690");
user.setUsername("你们好啊");
user.setPhone("12345547533");
user.setUpdateDate(new Date());
userMapper.add(user);
// 需要进行手动提交
sqlSession.commit();
}


@Test
public void TestDelete() {
userMapper.delete(12);
// 需要进行手动提交
sqlSession.commit();
}


@Test
public void TestUpdate() {
User user = new User();
user.setId(2);
user.setCity("唐山");
user.setCreateDate(new Date());
user.setEmail("[email protected]");
user.setNickname("你");
user.setPassword("1235690");
user.setUsername("你们好啊");
user.setPhone("12345547533");
user.setUpdateDate(new Date());
userMapper.update(user);
// 需要进行手动提交
sqlSession.commit();
}
}

你可能感兴趣的:(MyBatis)