ssm注意点 以及代码

BlogMapper.xml文件:
 
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">  
<mapper namespace="com.tiantian.mybatis.mapper.BlogMapper">  
<!--  新增记录  -->  
    <insert id="insertBlog" parameterType="Blog" useGeneratedKeys="true" keyProperty="id">  
        insert into t_blog(title,content,owner) values(#{title},#{content},#{owner})  
    </insert>  
<!--  查询单条记录  -->  
    <select id="selectBlog" parameterType="int" resultMap="BlogResult">  
       select * from t_blog where id = #{id}  
    </select>  
<!--  修改记录  -->  
    <update id="updateBlog" parameterType="Blog">  
        update t_blog set title = #{title},content = #{content},owner = #{owner} where id = #{id}  
    </update>  
<!--  查询所有记录  -->  
    <select id="selectAll" resultType="Blog">  
        select * from t_blog  
    </select>  
<!--  删除记录  -->  
    <delete id="deleteBlog" parameterType="int">  
       delete from t_blog where id = #{id}  
    </delete>  
     
</mapper>  
 
BlogMapper.java:
 
Java代码  收藏代码
package com.tiantian.mybatis.mapper;  
   
import java.util.List;  
import com.tiantian.mybatis.model.Blog;  
   
publicinterface BlogMapper {  
   
    public Blog selectBlog(int id);  
     
    publicvoid insertBlog(Blog blog);  
     
    publicvoid updateBlog(Blog blog);  
     
    publicvoid deleteBlog(int id);  
     
    public List<Blog> selectAll();  
     
}  
 
BlogServiceImpl.java:
 
Java代码  收藏代码
package com.tiantian.mybatis.service.impl;  
   
import java.util.List;  
import javax.annotation.Resource;  
import org.springframework.stereotype.Service;  
import com.tiantian.mybatis.mapper.BlogMapper;  
import com.tiantian.mybatis.model.Blog;  
import com.tiantian.mybatis.service.BlogService;  
   
@Service  
publicclass BlogServiceImpl implements BlogService {  
   
    private BlogMapper blogMapper;  
     
    publicvoid deleteBlog(int id) {  
       blogMapper.deleteBlog(id);  
    }  
   
    public Blog find(int id) {  
       returnblogMapper.selectBlog(id);  
    }  
   
    public List<Blog> find() {  
       returnblogMapper.selectAll();  
    }  
   
    publicvoid insertBlog(Blog blog) {  
       blogMapper.insertBlog(blog);  
    }  
   
    publicvoid updateBlog(Blog blog) {  
       blogMapper.updateBlog(blog);  
    }  
   
    public BlogMapper getBlogMapper() {  
       returnblogMapper;  
    }  
   
    @Resource  
    publicvoid setBlogMapper(BlogMapper blogMapper) {  
       this.blogMapper = blogMapper;  
    }  
   
}  
 
MapperScannerConfigurer
       利用上面的方法进行整合的时候,我们有一个Mapper就需要定义一个对应的MapperFactoryBean,当我们的Mapper比较少的时候,这样做也还可以,但是当我们的Mapper相当多时我们再这样定义一个个Mapper对应的MapperFactoryBean就显得速度比较慢了。为此Mybatis-Spring为我们提供了一个叫做MapperScannerConfigurer的类,通过这个类Mybatis-Spring会自动为我们注册Mapper对应的MapperFactoryBean对象。
       如果我们需要使用MapperScannerConfigurer来帮我们自动扫描和注册Mapper接口的话我们需要在Spring的applicationContext配置文件中定义一个MapperScannerConfigurer对应的bean。对于MapperScannerConfigurer而言有一个属性是我们必须指定的,那就是basePackage。basePackage是用来指定Mapper接口文件所在的基包的,在这个基包或其所有子包下面的Mapper接口都将被搜索到。多个基包之间可以使用逗号或者分号进行分隔。最简单的MapperScannerConfigurer定义就是只指定一个basePackage属性,如:
 
Xml代码  收藏代码
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
   <property name="basePackage" value="com.tiantian.mybatis.mapper" />  
</bean>  
 
       这样MapperScannerConfigurer就会扫描指定基包下面的所有接口,并把它们注册为一个个MapperFactoryBean对象。当使用MapperScannerConfigurer加basePackage属性的时候,我们上面例子的applicationContext配置文件将变为这样:
 
Xml代码  收藏代码
<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:mvc="http://www.springframework.org/schema/mvc"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
     http://www.springframework.org/schema/context  
     http://www.springframework.org/schema/context/spring-context-3.0.xsd  
     http://www.springframework.org/schema/mvc  
     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">  
   
    <context:component-scan base-package="com.tiantian.mybatis" />  
    <context:property-placeholder location="classpath:config/jdbc.properties" />  
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
       destroy-method="close">  
       <property name="driverClassName" value="${jdbc.driver}" />  
       <property name="url" value="${jdbc.url}" />  
       <property name="username" value="${jdbc.username}" />  
       <property name="password" value="${jdbc.password}" />  
    </bean>  
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
       <property name="dataSource" ref="dataSource" />  
       <property name="mapperLocations" value="classpath:com/tiantian/mybatis/mapper/*.xml" />  
       <property name="typeAliasesPackage" value="com.tiantian.mybatis.model" />  
    </bean>  
   <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
       <property name="basePackage" value="com.tiantian.mybatis.mapper" />  
    </bean> 
</beans>  
 
有时候我们指定的基包下面的并不全是我们定义的Mapper接口,为此MapperScannerConfigurer还为我们提供了另外两个可以缩小搜索和注册范围的属性。一个是annotationClass,另一个是markerInterface。
annotationClass:当指定了annotationClass的时候,MapperScannerConfigurer将只注册使用了annotationClass注解标记的接口。
markerInterface:markerInterface是用于指定一个接口的,当指定了markerInterface之后,MapperScannerConfigurer将只注册继承自markerInterface的接口。
       如果上述两个属性都指定了的话,那么MapperScannerConfigurer将取它们的并集,而不是交集。即使用了annotationClass进行标记或者继承自markerInterface的接口都将被注册为一个MapperFactoryBean。
现在假设我们的Mapper接口都继承了一个SuperMapper接口,那么我们就可以这样来定义我们的MapperScannerConfigurer。
 
Xml代码  收藏代码
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
   <property name="basePackage" value="com.tiantian.mybatis.mapper" />  
   <property name="markerInterface" value="com.tiantian.mybatis.mapper.SuperMapper"/>  
</bean>  
 
 
       如果是都使用了注解MybatisMapper标记的话,那么我们就可以这样来定义我们的MapperScannerConfigurer。
 
Xml代码  收藏代码
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
   <property name="basePackage" value="com.tiantian.mybatis.mapper" />  
   <property name="annotationClass" value="com.tiantian.mybatis.annotation.MybatisMapper"/>  
</bean>  
 
       除了用于缩小注册Mapper接口范围的属性之外,我们还可以指定一些其他属性,如:
 sqlSessionFactory:这个属性已经废弃。当我们使用了多个数据源的时候我们就需要通过sqlSessionFactory来指定在注册MapperFactoryBean的时候需要使用的SqlSessionFactory,因为在没有指定sqlSessionFactory的时候,会以Autowired的方式自动注入一个。换言之当我们只使用一个数据源的时候,即只定义了一个SqlSessionFactory的时候我们就可以不给MapperScannerConfigurer指定SqlSessionFactory。
sqlSessionFactoryBeanName:它的功能跟sqlSessionFactory是一样的,只是它指定的是定义好的SqlSessionFactory对应的bean名称。
sqlSessionTemplate:这个属性已经废弃。它的功能也是相当于sqlSessionFactory的,因为就像前面说的那样,MapperFactoryBean最终还是使用的SqlSession的getMapper方法取的对应的Mapper对象。当定义有多个SqlSessionTemplate的时候才需要指定它。对于一个MapperFactoryBean来说SqlSessionFactory和SqlSessionTemplate只需要其中一个就可以了,当两者都指定了的时候,SqlSessionFactory会被忽略。
sqlSessionTemplateBeanName:指定需要使用的sqlSessionTemplate对应的bean名称。
注意:由于使用sqlSessionFactory和sqlSessionTemplate属性时会使一些内容在PropertyPlaceholderConfigurer之前加载,导致在配置文件中使用到的外部属性信息无法被及时替换而出错,因此官方现在新的Mybatis-Spring中已经把sqlSessionFactory和sqlSessionTemplate属性废弃了,推荐大家使用sqlSessionFactoryBeanName属性和sqlSessionTemplateBeanName属性。
 
Xml代码  收藏代码
<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:mvc="http://www.springframework.org/schema/mvc"  
    xmlns:mybatis="http://www.mybatis.org/schema/mybatis"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
     http://www.springframework.org/schema/context  
     http://www.springframework.org/schema/context/spring-context-3.0.xsd  
     http://www.mybatis.org/schema/mybatis  
     http://www.mybatis.org/schema/mybatis/mybatis-spring.xsd  
     http://www.springframework.org/schema/mvc  
     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">  
   
    <context:component-scan base-package="com.tiantian.mybatis" />  
    <context:property-placeholder location="classpath:config/jdbc.properties" />  
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
       destroy-method="close">  
       <property name="driverClassName" value="${jdbc.driver}" />  
       <property name="url" value="${jdbc.url}" />  
       <property name="username" value="${jdbc.username}" />  
       <property name="password" value="${jdbc.password}" />  
    </bean>  
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
       <property name="dataSource" ref="dataSource" />  
       <property name="mapperLocations" value="classpath:com/tiantian/mybatis/mapper/*.xml" />  
       <property name="typeAliasesPackage" value="com.tiantian.mybatis.model" />  
    </bean>  
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
       <property name="basePackage" value="com.tiantian.mybatis.mapper" />  
       <property name="markerInterface" value="com.tiantian.mybatis.mapper.SuperMapper"/>  
       <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>  
    </bean>  
</beans>  
 
SqlSessionTemplate
       除了上述整合之后直接使用Mapper接口之外,Mybatis-Spring还为我们提供了一种直接使用SqlSession的方式。Mybatis-Spring为我们提供了一个实现了SqlSession接口的SqlSessionTemplate类,它是线程安全的,可以被多个Dao同时使用。同时它还跟Spring的事务进行了关联,确保当前被使用的SqlSession是一个已经和Spring的事务进行绑定了的。而且它还可以自己管理Session的提交和关闭。当使用了Spring的事务管理机制后,SqlSession还可以跟着Spring的事务一起提交和回滚。
       使用SqlSessionTemplate时我们可以在Spring的applicationContext配置文件中如下定义:
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
       <constructor-arg index="0" ref="sqlSessionFactory" />
    </bean>
       这样我们就可以通过Spring的依赖注入在Dao中直接使用SqlSessionTemplate来编程了,这个时候我们的Dao可能是这个样子:
 
Java代码  收藏代码
package com.tiantian.mybatis.dao;  
   
import java.util.List;  
import javax.annotation.Resource;  
import org.mybatis.spring.SqlSessionTemplate;  
import org.springframework.stereotype.Repository;  
import com.tiantian.mybatis.model.Blog;  
   
@Repository  
publicclass BlogDaoImpl implements BlogDao {  
   
    private SqlSessionTemplate sqlSessionTemplate;  
   
    publicvoid deleteBlog(int id) {  
       sqlSessionTemplate.delete("com.tiantian.mybatis.mapper.BlogMapper.deleteBlog", id);  
    }  
   
    public Blog find(int id) {  
      returnsqlSessionTemplate.selectOne("com.tiantian.mybatis.mapper.BlogMapper.selectBlog", id);  
    }  
   
    public List<Blog> find() {  
       returnthis.sqlSessionTemplate.selectList("com.tiantian.mybatis.mapper.BlogMapper.selectAll");  
    }  
   
    publicvoid insertBlog(Blog blog) {  
       this.sqlSessionTemplate.insert("com.tiantian.mybatis.mapper.BlogMapper.insertBlog", blog);  
    }  
   
    publicvoid updateBlog(Blog blog) {  
       this.sqlSessionTemplate.update("com.tiantian.mybatis.mapper.BlogMapper.updateBlog", blog);  
    }  
     
    public SqlSessionTemplate getSqlSessionTemplate() {  
       returnsqlSessionTemplate;  
    }  
     
    @Resource  
    publicvoid setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {  
       this.sqlSessionTemplate = sqlSessionTemplate;  
    }  
   
}  
 注:
 
      本文是基于Mybatis3.2.1、Mybatis-Spring1.1.0和Spring3.1写的。
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我无法在此处提供完整的SSM书本管理系统代码。但我可以为您提供一些代码示例和思路: 1. DAO层代码示例(以图书信息管理为例): ``` public interface BookMapper { // 添加图书 public int addBook(Book book); // 删除图书 public int deleteBook(int bookId); // 修改图书 public int updateBook(Book book); // 查询所有图书 public List<Book> findAllBooks(); // 根据ID查询图书 public Book findBookById(int bookId); // 根据书名查询图书 public List<Book> findBooksByName(String bookName); } ``` 2. Service层代码示例(以图书信息管理为例): ``` public interface BookService { // 添加图书 public int addBook(Book book); // 删除图书 public int deleteBook(int bookId); // 修改图书 public int updateBook(Book book); // 查询所有图书 public List<Book> findAllBooks(); // 根据ID查询图书 public Book findBookById(int bookId); // 根据书名查询图书 public List<Book> findBooksByName(String bookName); } ``` 3. Controller层代码示例(以图书信息管理为例): ``` @Controller @RequestMapping("/book") public class BookController { @Autowired private BookService bookService; // 添加图书 @RequestMapping("/add") public String addBook(Book book) { int result = bookService.addBook(book); if(result > 0) { return "redirect:/book/list"; } else { return "error"; } } // 删除图书 @RequestMapping("/delete") public String deleteBook(int bookId) { int result = bookService.deleteBook(bookId); if(result > 0) { return "redirect:/book/list"; } else { return "error"; } } // 修改图书 @RequestMapping("/update") public String updateBook(Book book) { int result = bookService.updateBook(book); if(result > 0) { return "redirect:/book/list"; } else { return "error"; } } // 查询所有图书 @RequestMapping("/list") public String findAllBooks(Model model) { List<Book> books = bookService.findAllBooks(); model.addAttribute("books", books); return "bookList"; } // 根据ID查询图书 @RequestMapping("/detail") public String findBookById(int bookId, Model model) { Book book = bookService.findBookById(bookId); model.addAttribute("book", book); return "bookDetail"; } // 根据书名查询图书 @RequestMapping("/search") public String findBooksByName(String bookName, Model model) { List<Book> books = bookService.findBooksByName(bookName); model.addAttribute("books", books); return "bookList"; } } ``` 以上是一个简单的SSM图书管理系统的代码示例,您可以根据具体需求进行修改和扩展。另外,需要注意的是,SSM框架中的配置文件也需要正确地进行配置,例如Spring的配置文件、MyBatis的配置文件等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值