时间:2015-01-27 18:04 来源: 我爱IT技术网 编辑:52微风
网上找个好用的guice+mybatis挺不容易的,官网上的范例也超简单,费了半天劲总算是写出来了,放上来备忘
环境
os:ubuntu 11.10
java:Java(TM) SE Runtime Environment (build 1.6.0_25-b06)
guice:3.0
mybatis:3.1
guice-mybatis:3.3
database:mysql 5.1
数据库脚本
CREATE TABLE person ( name varchar(32) NOT NULL DEFAULT '', id int(11) NOT NULL AUTO_INCREMENT, sex int(11) NOT NULL, age int(11) NOT NULL, comment varchar(4000) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8
DAO对象
PersonDao.java
package com.demo.domain; import java.util.List; public interface PersonDao { public Person getById(final int id); public ListgetAll(); public int save(final Person person); public int remove(final int id); public void printInfo(); }
领域对象
Person.java
package com.demo.domain; import java.util.List; import javax.inject.Inject; import org.mybatis.guice.transactional.Transactional; import com.demo.domain.mapper.PersonMapper; import com.google.inject.Injector; public class Person implements PersonDao { private Integer id; @Inject private Injector injector; @Inject private PersonMapper personMapper; private String name; private Integer sex; private Integer age; private String comment; public Integer getId() { return id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getSex() { return sex; } public void setSex(Integer sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getComment() { return comment; } public void setComment(String comment) { this.comment = comment; } @Override public Person getById(int id) { return this.personMapper.getById(id); } @Override public ListgetAll() { return this.personMapper.getAll(); } @Override @Transactional public int save(Person person) { if (person == null){ return -1; } if (person.getId() == null) return this.personMapper.append(person); else return this.personMapper.update(person); } @Override @Transactional public int remove(int id) { return this.personMapper.remove(id); } @Override public void printInfo() { System.out.println("injector is " + this.injector); System.out.println("PersonMapper is " + this.personMapper); } }
Mapper对象
PersonMapper.java
package com.demo.domain.mapper; import java.util.List; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Options; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import org.mybatis.guice.transactional.Transactional; import com.demo.domain.Person; public interface PersonMapper { @Select("select * from person where id=#{id}") @Options(flushCache=true) public Person getById(final int id); @Select("select * from person order by name asc") @Options(flushCache=true) public ListgetAll(); @Insert("insert into person(name, sex, age, comment) values(#{name}, #{sex}, #{age}, #{comment})") @Options(useGeneratedKeys=true, keyProperty="id") public int append(final Person person); @Update("update person set name=#{name}, sex=#{sex}, age=#{age}, comment=#{comment} where id=#{id}") @Options(flushCache=true) public int update(final Person person); @Delete("delete from person where id=#{id}") @Options(flushCache=true) public int remove(@Param("id")final int id); }
配置文件
db.properties
db.classname=org.gjt.mm.mysql.Driver db.url=jdbc:mysql://127.0.0.1:3306/demo1?useUnicode=true&characterEncoding=UTF-8 db.username=jim db.password=1234
测试范例程序
Demo.java
package com.demo.app; import java.util.Properties; import java.util.ResourceBundle; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionManager; import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory; import org.mybatis.guice.MyBatisModule; import org.mybatis.guice.datasource.builtin.PooledDataSourceProvider; import com.demo.domain.Person; import com.demo.domain.PersonDao; import com.demo.domain.mapper.PersonMapper; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.name.Names; public class Demo1 { public static void main(String[] args) { final Properties properties = new Properties(); ResourceBundle rb = ResourceBundle.getBundle("db"); properties.setProperty("mybatis.environment.id", "demo1"); properties.setProperty("JDBC.driver", rb.getString("db.classname")); properties.setProperty("JDBC.url", rb.getString("db.url")); properties.setProperty("JDBC.username", rb.getString("db.username")); properties.setProperty("JDBC.password", rb.getString("db.password")); properties.setProperty("JDBC.autoCommit", "false"); Injector injector = Guice.createInjector(new MyBatisModule() { @Override protected void initialize() { bindDataSourceProviderType(PooledDataSourceProvider.class); bindTransactionFactoryType(JdbcTransactionFactory.class); addMapperClasses("com.demo.domain.mapper");//将包下类都作为mapper导入 addSimpleAlias(Person.class); bind(PersonDao.class).to(Person.class); Names.bindProperties(this.binder(), properties); } }); SqlSessionFactory sessionFactory = injector.getInstance(SqlSessionFactory.class); System.out.println("sessionFactory.class = " + sessionFactory.getClass()); SqlSessionManager sessionManager = injector.getInstance(SqlSessionManager.class); System.out.println("sessionManager.class = " + sessionManager.getClass()); Person dao = (Person)injector.getInstance(PersonDao.class); System.out.println("personDao.class = " + dao.getClass()); dao.printInfo(); System.out.println("personDao.class = " + dao.getClass()); PersonMapper personMapper = injector.getInstance(PersonMapper.class); System.out.println("personMapper.class = " + personMapper.getClass()); Person p = new Person(); p.setName("张飞"); p.setAge(25); p.setSex(0); p.setComment("123"); int ret = dao.save(p); System.out.println(ret); int id = p.getId(); Person p1 = dao.getById(id); System.out.println(p1.getName()); } }
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
