MyBatis实现CRUD操作:
源码下载地址:
http://download.csdn.net/detail/itjavawfc/7690569
工程目录结构:
代码如下:
package com.mybatistest.bean;
import java.util.Date;
import org.apache.ibatis.ognl.IntHashMap.Entry;
public class Contact extends Entry{
private int id;
private String name;
private String address;
private String gender;
private Date dob;
private String email;
private String mobile;
private String phone;
public Contact() {
super();
}
public Contact(int id, String name, String address, String gender,
Date dob, String email, String mobile, String phone) {
super();
this.id = id;
this.name = name;
this.address = address;
this.gender = gender;
this.dob = dob;
this.email = email;
this.mobile = mobile;
this.phone = phone;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Date getDob() {
return dob;
}
public void setDob(java.util.Date date) {
this.dob = (Date) date;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
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">
<!--这块等于dao接口的实现 namespace必须和接口的类路径一样-->
<mapper namespace="com.mybatistest.mapper.ContactMapper">
<!-- id是查询语句的别名,代称:resultType是返回的类型 -->
<select id="selectList" resultType="Contact">
select * from contacts
</select>
<!-- parameterType为参数类型,resultType为返回类型 -->
<select id="selectByName" parameterType="String" resultType="Contact">
select * from contacts where name=#{name}
</select>
<select id="findContact" parameterType="int" resultType="Contact">
select * from contacts where id=#{id}
</select>
<!-- select * from contacts where name like concat(#{name})
-->
<!--
<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>
-->
<update id="updateContact" parameterType="Contact">
update contacts set name=#{name,jdbcType=VARCHAR},address=#{address,jdbcType=VARCHAR},gender=#{gender,jdbcType=VARCHAR},
dob=#{dob,jdbcType=DATE},email=#{email,jdbcType=VARCHAR},mobile=#{mobile,jdbcType=VARCHAR},phone=#{phone,jdbcType=VARCHAR} 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,jdbcType=VARCHAR},#{address,jdbcType=VARCHAR},#{gender,jdbcType=VARCHAR},#{dob,jdbcType=DATE},#{email,jdbcType=VARCHAR},#{mobile,jdbcType=VARCHAR},#{phone,jdbcType=VARCHAR})
</insert>
-->
<!--源代码
<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>
-->
<!-- useGeneratedKeys="true" keyProperty="id"> -->
<insert id="insertContact"
parameterType="Contact">
insert into contacts (id,name,address,gender,dob,email,mobile,phone)
values (#{id},#{name},#{address},#{gender},#{dob},#{email},#{mobile},#{phone})
</insert>
<delete id="deleteContact" parameterType="int">
delete from contacts where id=#{id}
</delete>
</mapper>
package com.mybatistest.dao.impl;
import java.sql.SQLException;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.transaction.Transaction;
import com.mybatistest.bean.Contact;
import com.mybatistest.dao.ContactDao;
import com.mybatistest.mapper.ContactMapper;
import com.mybatistest.util.DBUtil;
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;
}
}
package com.mybatistest.dao;
import java.util.List;
import com.mybatistest.bean.Contact;
public interface ContactDao {
List<Contact> query();
Contact find(int i);
List<Contact> query(String string);
int insert(Contact contact);
int update(Contact contact);
int delete(int i);
}
package com.mybatistest.mapper;
import java.util.List;
import com.mybatistest.bean.Contact;
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);
}
package com.mybatistest.Test;
import java.util.Date;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
import com.mybatistest.bean.Contact;
import com.mybatistest.dao.ContactDao;
import com.mybatistest.dao.impl.ContactDaoImpl;
public class ContactDaoTest {
@Test
public void testSelectList(){
ContactDao dao = new ContactDaoImpl();
List<Contact> list = dao.query();
Assert.assertEquals(12, 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("小苹果");
Assert.assertEquals(2, 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.setId(20);
contact.setName("小苹果");
contact.setAddress("Newyork City,Down town");
contact.setGender("男");
contact.setDob(new Date());
contact.setGender("M");
contact.setEmail("il.com");
contact.setMobile("126");
contact.setPhone("2658");
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("小苹果");
contact.setAddress("Newyork City,Down town");
contact.setGender("男");
contact.setDob(new Date());
contact.setGender("M");
contact.setEmail("il.com");
contact.setMobile("126");
contact.setPhone("2658");
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();
}
}
}
package com.mybatistest.Test;
import java.util.Date;
import java.util.List;
import org.junit.Assert;
import com.mybatistest.bean.Contact;
import com.mybatistest.dao.ContactDao;
import com.mybatistest.dao.impl.ContactDaoImpl;
import com.mybatistest.mapper.ContactMapper;
public class Test {
public static void main(String[] args){
/* //删除
ContactDao dao = new ContactDaoImpl();
try{
int rows = dao.delete(6);
Assert.assertEquals(1, rows);
Contact deleted = dao.find(6);
Assert.assertNull(deleted);
}catch(Exception ex){
Assert.fail();
}
*/
/*
//通过id查找
ContactDao dao = new ContactDaoImpl();
Contact contact = dao.find(9);
// Assert.assertNotNull(contact);
// Assert.assertEquals("ssss", contact.getName());
System.out.println("name:"+contact.getName());
*/
/*
//查询所有的信息
ContactDao dao = new ContactDaoImpl();
List<Contact> list = dao.query();
Assert.assertEquals(12, list.size());
for(Contact c : list){
System.out.println("name:"+c.getName()+",dob:"+c.getDob()+",email:"+c.getEmail());
}
*/
/*
//更新
Contact contact = new Contact();
contact.setId(9);
contact.setName("MyBatis Update");
contact.setAddress("Shanghai,China");
contact.setDob(new Date());
contact.setGender("M");
contact.setEmail("ld@gm");
ContactDao dao = new ContactDaoImpl();
dao.update(contact);
*/
/*//添加实体成功
Contact contact = new Contact();
contact.setId(13);
contact.setName("MyBatis Test");
contact.setAddress("Newyork City,Down town");
contact.setGender("男");
contact.setDob(new Date());
contact.setGender("M");
contact.setEmail("il.com");
contact.setMobile("126");
contact.setPhone("2658");
ContactDao dao = new ContactDaoImpl();
int rows = dao.insert(contact);
System.out.println(rows+" rows effected!");
Assert.assertEquals(1, rows);
*/
/*通过名字找
ContactDao dao = new ContactDaoImpl();
List<Contact> list = dao.query("小苹果");
Assert.assertEquals(2, list.size());
for(Contact c : list){
System.out.println("name:"+c.getName()+",dob:"+c.getDob()+",email:"+c.getEmail());
}
*/
}
}
package com.mybatistest.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 org.apache.ibatis.transaction.Transaction;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
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();
}
}
<?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">
<!-- 加载的properties文件,主要方参数 -->
<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>
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
username=scott
password=tiger