Mybatis小试CRUD

初次使用mybatis,对contacts表做一个增删改查。

contacts表结构:

+---------+------------------+
| Field   | Type             |
+---------+------------------+
| id      | int(10) unsigned |
| name    | varchar(45)      |
| address | varchar(45)      |
| gender  | char(1)          |
| dob     | datetime         |
| email   | varchar(45)      |
| mobile  | varchar(15)      |
| phone   | varchar(15)      |
+---------+------------------+

eclipse工程结构:


官方文档上直接copy了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>
	<properties resource="db.properties">
	</properties>
	
	<typeAliases>
		<typeAlias type="com.mybatistest.bean.Contact" alias="Contact"/>
	</typeAliases>
	
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${driver}" />
				<property name="url" value="${url}" />
				<property name="username" value="${username}" />
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environments>
	
	<mappers>
		<mapper resource="com/mybatistest/bean/ContactMapper.xml" />
	</mappers>
</configuration>
生成entity类 Contact.java  ,并建立对应的ContactMapper.xml文件,如下:

<?xml version="1.0" encoding="UTF-8" ?>     
<!DOCTYPE mapper     
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"     
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">     
     
<mapper namespace="com.mybatistest.mapper.ContactMapper">
    <select id="selectList" resultType="Contact">     
        select * from contacts     
    </select> 
    <select id="selectByName" parameterType="String" resultType="Contact">
    	select * from contacts where name like concat('%',#{name},'%')
    </select>
    <select id="findContact" parameterType="int" resultType="Contact">
    	select * from contacts where id=#{id}
    </select>  
    
    <update id="updateContact" parameterType="Contact">
    	update contacts set name=#{name},address=#{address},gender=#{gender},
    	dob=#{dob},email=#{email},mobile=#{mobile},phone=#{phone} where id=#{id}
    </update>  
    <insert id="insertContact" 
    	parameterType="Contact" 
    	useGeneratedKeys="true"
    	keyProperty="id">
    	insert into contacts (name,address,gender,dob,email,mobile,phone) 
    	values (#{name},#{address},#{gender},#{dob},#{email},#{mobile},#{phone})
    </insert>
    <delete id="deleteContact" parameterType="int">
    	delete from contacts where id=#{id}
    </delete>
</mapper>
第一次写like查询的时候是用的 like '%#{name}%',结果查不到,网上查过以后,有人给的建议是contact('%',#{name},'%'),于是拿来用了。

同时,还要生成一个ContactMapper的接口,如下:

public interface ContactMapper {
	List<Contact> selectList();
	List<Contact> selectByName(String name);
	Contact findContact(int id);
	int updateContact(Contact contact);
	int insertContact(Contact contact);
	int deleteContact(int id);
}

下面是CRUD操作的实现

public class ContactDaoImpl implements ContactDao {
	private SqlSession session; //
	private Transaction transaction; //
	private ContactMapper getContactMapper(){
		session = DBUtil.getSqlSession();
		//get mapper
		ContactMapper mapper = session.getMapper(ContactMapper.class);
		return mapper;
	}
	
	private void closeSession(){
		if(session!=null){
			session.close();
		}
	}
	//query all
	public List<Contact> query(){
		ContactMapper mapper = getContactMapper();
		List<Contact> list = mapper.selectList();
		return list;
	}
	
	//query by name
	public List<Contact> query(String name) {
		ContactMapper mapper = getContactMapper();
		List<Contact> list = mapper.selectByName(name);
		return list;
	}

	//find one by id
	public Contact find(int id){
		ContactMapper mapper = getContactMapper();
		return mapper.findContact(id);
	}
	
	//update contact
	public int update(Contact contact){
		ContactMapper mapper = getContactMapper();
		transaction = DBUtil.getTransaction(session); //transactio begin
		int rows = mapper.updateContact(contact);
		try {
			transaction.commit(); //commit
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			closeSession();
		}
		return rows; //return effected rows
	}
	
	//insert contact to db
	public int insert(Contact contact){
		ContactMapper mapper = getContactMapper();
		transaction = DBUtil.getTransaction(session);
		int rows = mapper.insertContact(contact);
		try {
			transaction.commit();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			closeSession();
		}
		return rows;
	}
	
	//delete contact by id
	public int delete(int id){
		ContactMapper mapper = getContactMapper();
		transaction = DBUtil.getTransaction(session);
		int rows = mapper.deleteContact(id);
		try {
			transaction.commit();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			closeSession();
		}
		return rows;
	}
}
之后重构,生成接口ContactDao。

下面是工具类DBUtil.java

public class DBUtil {
	private static SqlSessionFactory sessfactory = null;
	private static TransactionFactory transFactory = null;
	static{
		Reader reader = null;
		try {
			reader = Resources.getResourceAsReader("configuration.xml");
		} catch (IOException e) {
			e.printStackTrace();
		}
		sessfactory = new SqlSessionFactoryBuilder().build(reader);
		transFactory = new JdbcTransactionFactory();
	}
	
	
	public static Transaction getTransaction(SqlSession session){
		return transFactory.newTransaction(session.getConnection());
	}
	
	public static SqlSession getSqlSession(){
		return sessfactory.openSession();
	}
}
写完实现了,接着可以写简单单元测试了。。

public class ContactDaoTest {
	@Test
	public void testSelectList(){
		ContactDao dao = new ContactDaoImpl();
		List<Contact> list = dao.query();
		Assert.assertEquals(3, list.size());
		for(Contact c : list){
			System.out.println("name:"+c.getName()+",dob:"+c.getDob()+",email:"+c.getEmail());
		}
	}
	@Test
	public void testSelectByName(){
		ContactDao dao = new ContactDaoImpl();
		List<Contact> list = dao.query("tangerine");
		Assert.assertEquals(1, list.size());
		for(Contact c : list){
			System.out.println("name:"+c.getName()+",dob:"+c.getDob()+",email:"+c.getEmail());
		}
	}
	@Test
	public void testFindContact(){
		ContactDao dao = new ContactDaoImpl();
		Contact contact = dao.find(9);
		Assert.assertNotNull(contact);
		Assert.assertEquals("ssss", contact.getName());
		System.out.println("name:"+contact.getName());
	}
	
	@Test
	public void testInsertContact(){
		Contact contact = new Contact();
		contact.setName("MyBatis Test");
		contact.setAddress("Newyork City,Down town");
		contact.setDob(new Date());
		contact.setGender("M");
		contact.setEmail("HelloBatis@gmail.com");
		ContactDao dao = new ContactDaoImpl();
		int rows = dao.insert(contact);
		System.out.println(rows+" rows effected!");
		Assert.assertEquals(1, rows);
	}
	
	@Test
	public void testUpdateContact(){
		Contact contact = new Contact();
		contact.setId(9);
		contact.setName("MyBatis Update");
		contact.setAddress("Shanghai,China");
		contact.setDob(new Date());
		contact.setGender("M");
		contact.setEmail("mybatisworld@gmail.com");
		ContactDao dao = new ContactDaoImpl();
		dao.update(contact);
		
	}
	
	@Test
	public void testDeleteContact(){
		ContactDao dao = new ContactDaoImpl();
		try{
			int rows = dao.delete(5);
			Assert.assertEquals(1, rows);
			Contact deleted = dao.find(5);
			Assert.assertNull(deleted);
		}catch(Exception ex){
			Assert.fail();
		}
	}

mybatis还是挺简单的,就是要记的规则多了, 技术学多了,脑袋里面全是规则。。。。




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dyyaries

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值