您的位置:首页 > 编程语言 > Java开发

spring 集成 mybatis 及mybatis 的 crud 操作

2013-09-27 14:30 716 查看
今天有空学习了一下mybatis,这个orm框架和jdbctemplate很相似,都需要自己写sql语句,都可以对sql进行优化控制。有点不同的mybatis不需要再一个mapper的实体来映射结果集,只需要配置是指定一下实体对象即可,它会自动帮你映射到该实体上;而jdbctemplate则需要自己另外写一个实现rowmapper借口的结果集映射对象。

还有其他的mybatis详细使用方法可以去官网看看,我这里贴下spring 集成mybatis及简单的crud操作的代码。

mybatis学习的传送门:http://mybatis.github.io/mybatis-3/zh/dynamic-sql.html

spring的配置文件applicationContext.xml,配置数据源和mybatis的sqlSessionFactory,

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="maxActive" value="${jdbc.maxActive}"></property>
<property name="maxIdle" value="${jdbc.maxIdle}"></property>
<property name="maxWait" value="${jdbc.maxWait}"></property>
<property name="defaultAutoCommit" value="${jdbc.defaultAutoCommit}"></property>
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:configuration.xml" />
<property name="dataSource" ref="dataSource" />
</bean>


configuration.xm

<?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>

<typeAliases>
<!--给实体类起一个别名 user ,userMapper.xml中的就可以这样定义resultType="User" -->
<!--就无需这样写路径了 resultType="com.forum.po.User" -->
<typeAlias type="com.yang.model.User" alias="User" />
<typeAlias type="com.yang.model.Books" alias="Books" />
</typeAliases>

<mappers>
<!--userMapper.xml装载进来 同等于把“dao”的实现装载进来 -->
<mapper resource="com/yang/dao/impl/userMapper.xml" />
<mapper resource="com/yang/dao/impl/bookMapper.xml" />
</mappers>

</configuration>


bookMapper.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">

<!--这块等于dao接口的实现 namespace必须和接口的类路径一样 -->
<mapper namespace="com.yang.dao.BookMapper">

<!-- id必须和接口中的方法名一样 返回一个Books 就是刚才的别名 如果不弄别名要连类路径一起写 麻烦 -->
<select id="findById" parameterType="int" resultType="Books">
select
*
from books where book_id=#{book_id}
</select>

<select id="findByName" parameterType="string" resultType="Books">
select
*
from books where book_name like #{book_name}
</select>

<insert id="save" parameterType="Books" useGeneratedKeys="true"
keyProperty="book_id">
insert into books(book_name,book_author,book_date)
values(#{book_name},#{book_author},#{book_date})
</insert>

<update id="update" parameterType="Books">
update books set
book_name=#{book_name},book_author=#{book_author},book_date=#{book_date}
where book_id=#{book_id}
</update>

<delete id="delete" parameterType="int">
delete from books where
book_id=#{book_id}
</delete>

<select id="findByArgs" parameterType="map" resultType="Books">
select
*
from books where book_name like #{book_name}
<if test="book_publish!=null">
and book_publish like #{book_publish}
</if>
</select>

</mapper>


com.yang.dao.BookMapper,dao接口,上面的mapper是这个dao接口的实现

public interface BookMapper {

public Books findById(int book_id);

public List<Books> findByName(String book_name);

public int save(Books books);

public int update(Books books);

public int delete(int book_id);

public List<Books> findByArgs(Map<String, String> map);
}


service层的接口

public interface IBookService {

public Books findById(int book_id);

public List<Books> findByName(String book_name);

public int save(Books books);

public int update(Books books);

public int delete(int book_id);

public List<Books> findByArgs(Map<String, String> map);

public void testTransaction(Books books, int deleteId);

}


service层的实现

public class BookServiceImpl implements IBookService {

private BookMapper bookMapper;

public void setBookMapper(BookMapper bookMapper) {
this.bookMapper = bookMapper;
}

public Books findById(int book_id) {
return this.bookMapper.findById(book_id);
}

public List<Books> findByName(String book_name) {
return this.bookMapper.findByName(book_name);
}

public int save(Books books) {
return this.bookMapper.save(books);
}

public int update(Books books) {
return this.bookMapper.update(books);
}

public int delete(int book_id) {
return this.bookMapper.delete(book_id);
}

public List<Books> findByArgs(Map<String, String> map) {
return this.bookMapper.findByArgs(map);
}

public void testTransaction(Books books, int deleteId) {
this.bookMapper.save(books);
this.bookMapper.delete(deleteId);
throw new RuntimeException(" ------- 事务测试");
}

}


上面的实现类里需要在spring配置文件中注入bookMapper

<bean id="bookService" class="com.yang.service.impl.BookServiceImpl">
<property name="bookMapper" ref="bookMapper" />
</bean>


bookMapper配置

<bean id="bookMapper" class="org.mybatis.spring.MapperFactoryBean">
<property name="mapperInterface" value="com.yang.dao.BookMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>


最后junit单元测试一下

private ApplicationContext applicationContext;
private IUserService userService;
private IBookService bookService;

@Before
public void before() {
String[] xmls = new String[] { "applicationContext.xml",
"applicationContext-mapper.xml",
"applicationContext-service.xml",
"applicationContext-transaction.xml" };
applicationContext = new ClassPathXmlApplicationContext(xmls);
userService = (IUserService) applicationContext.getBean("userService");
bookService = (IBookService) applicationContext.getBean("bookService");
}


@Test
public void findByArgs() {
Map<String, String> map = new HashMap<String, String>();
map.put("book_name", "%bbb%");
map.put("book_publish", null);
List<Books> books = this.bookService.findByArgs(map);
for (Books b : books) {
System.out.println(b.getBook_id() + " --- " + b.getBook_name()
+ " --- " + b.getBook_publish() + " --- "
+ b.getBook_date());
}
}


结果:



也附上目录结构

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: