1、题目形容

2、参考解答

com.controller包下的BookController.java

package com.controller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import com.dao.BookDao;import com.po.MyBook;@Controller("bookController")public class BookController {    @Autowired    private BookDao bookDao;    public void test() {        //查问一条书籍记录        MyBook abook = bookDao.selectBookBySN(1);        System.out.println(abook);        System.out.println("================");        //增加一条书籍记录        MyBook addmb = new MyBook();        addmb.setBookName("西游记");        addmb.setBookPrice((float) 24.6);        int add = bookDao.addBook(addmb);        System.out.println("增加了" + add + "条记录");        System.out.println("================");        //批改一条书籍记录        MyBook updatemb = new MyBook();        updatemb.setSn(1);        updatemb.setBookName("红楼梦");        updatemb.setBookPrice((float) 35.3);        int up = bookDao.updateBook(updatemb);        System.out.println("批改了" + up + "条记录");        System.out.println( "================");        //删除一条书籍记录        int dl = bookDao.deleteBook(9);        System.out.println("删除了" + dl + "条记录");        System.out.println("================");        //查问所有书籍记录        List<MyBook> list = bookDao.selectAllBook();        for (MyBook myBook : list) {            System.out.println(myBook);        }    }}

com.controller包下的TestController.java

package com.controller;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestController {    public static void main(String[] args) {        ApplicationContext appCon = new ClassPathXmlApplicationContext("applicationContext.xml");        BookController bc = (BookController)appCon.getBean("bookController");        bc.test();    }}

com.dao包下的BookDao.java

package com.dao;import java.util.List;import org.apache.ibatis.annotations.Mapper;import org.springframework.stereotype.Repository;import com.po.MyBook;@Repository("bookDao")@Mapper/*应用Spring主动扫描MyBatis的接口并拆卸(Spring将指定包中所有被@Mapper注解标注的接口主动拆卸为MyBatis的映射接口*/public interface BookDao {    /**     * 接口办法对应SQL映射文件UserMapper.xml中的id     */    public MyBook selectBookBySN(Integer sn);    public List<MyBook> selectAllBook();    public int addBook(MyBook book);    public int updateBook(MyBook book);    public int deleteBook(Integer sn);}

com.mybatis包下的BookMapper.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.dao.BookDao">    <!-- 依据sn查问书籍记录 -->    <select id="selectBookBySN" parameterType="Integer"         resultType="com.po.MyBook">        select * from book where sn=#{sn}    </select>    <!-- 查问所有书籍信息 -->    <select id="selectAllBook"  resultType="com.po.MyBook">        select * from book    </select>    <!-- 增加一条书籍记录 ,#{bookName}为com.po.MyBook的属性值-->    <insert id="addBook" parameterType="com.po.MyBook">        insert into book (bookName,bookPrice) values(#{bookName},#{bookPrice})    </insert>    <!-- 批改一条书籍记录 -->    <update id="updateBook" parameterType="com.po.MyBook">        update book set bookName = #{bookName},bookPrice = #{bookPrice} where sn=#{sn}    </update>    <!-- 删除一条书籍记录 -->    <delete id="deleteBook" parameterType="Integer">         delete from book where sn=#{sn}    </delete></mapper>

com.mybatis包下的mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>    <!-- 通知 MyBatis到哪里去找映射文件 -->     <mappers>        <mapper resource="com/mybatis/BookMapper.xml"/>     </mappers></configuration>

com.mybatis.mapper包下的BookMapper.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.dao.UserDao">    <!-- 依据sn查问书籍记录 -->    <select id="selectBookBySN" parameterType="Integer"         resultType="com.po.MyBook">        select * from book where sn = #{sn}    </select>    <!-- 查问所有书籍信息 -->    <select id="selectAllBook"  resultType="com.po.MyBook">        select * from book    </select>    <!-- 增加一条书籍记录 ,#{bookName}为com.po.MyBook的属性值-->    <insert id="addBook" parameterType="com.po.MyBook">        insert into book (bookName,bookPrice) values(#{bookName},#{bookPrice})    </insert>    <!-- 批改一条书籍记录 -->    <update id="updateBook" parameterType="com.po.MyBook">        update book set bookName = #{bookName},bookPrice = #{bookPrice} where sn = #{sn}    </update>    <!-- 删除一条书籍记录 -->    <delete id="deleteBook" parameterType="Integer">         delete from user where sn = #{sn}    </delete></mapper>

com.mybatis.po包下的MyBook.java

package com.mybatis.po;/** *springtest数据库中book表的长久化类 */public class MyBook {    private Integer sn;//主键    private String bookName;    private Float  bookPrice;    public Integer getSn() {        return sn;    }    public void setSn(Integer sn) {        this.sn = sn;    }    public String getBookName() {        return bookName;    }    public void setBookName(String bookName) {        this.bookName = bookName;    }    public Float getBookPrice() {        return bookPrice;    }    public void setBookPrice(Float bookPrice) {        this.bookPrice = bookPrice;    }    @Override    public String toString() {        return "MyBook [sn=" + sn + ", bookName=" + bookName + ", bookPrice=" + bookPrice + "]";    }}

com.mybatis.test包下的MyBatisTest.java

package com.mybatis.test;import java.io.IOException;import java.io.InputStream;import java.util.List;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 com.mybatis.po.MyBook;public class MyBatisTest {    public static void main(String[] args) {        try {            //读取配置文件mybatis-config.xml            InputStream config = Resources.getResourceAsStream("mybatis-config.xml");            //依据配置文件构建SqlSessionFactory            SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config);            //通过SqlSessionFactory创立SqlSession            SqlSession ss = ssf.openSession();            //SqlSession执行映射文件中定义的SQL,并返回映射后果            //com.mybatis.mapper.UserMapper.selectUserById为UserMapper.xml中的命名空间+select的id            //查问一条书籍记录            MyBook mb = ss.selectOne("com.mybatis.mapper.BookMapper.selectBookBySN", 1);            System.out.println(mb);            //增加一条书籍记录            MyBook addmb = new MyBook();            addmb.setSn(24);            addmb.setBookName("三国演义");            addmb.setBookPrice((float) 50.2);            ss.insert("com.mybatis.mapper.BookMapper.addBook",addmb);            //批改一条书籍记录             MyBook updatemb = new MyBook();            updatemb.setSn(1);            updatemb.setBookName("水浒传");            updatemb.setBookPrice((float) 40.1);            ss.update("com.mybatis.mapper.BookMapper.updateBook", updatemb);            //删除一条书籍记录            ss.delete("com.mybatis.mapper.BookMapper.deleteBook", 3);            //查问所有书籍记录            List<MyBook> listMb = ss.selectList("com.mybatis.mapper.BookMapper.selectAllBook");            for (MyBook myBook : listMb) {                System.out.println(myBook);            }            //提交事务            ss.commit();            //敞开SqlSession            ss.close();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

com.po包下的MyBook.java

package com.po;/** *springtest数据库中book表的长久化类 */public class MyBook {    private Integer sn;//主键    private String bookName;    private Float  bookPrice;        public Integer getSn() {        return sn;    }    public void setSn(Integer sn) {        this.sn = sn;    }    public String getBookName() {        return bookName;    }    public void setBookName(String bookName) {        this.bookName = bookName;    }    public Float getBookPrice() {        return bookPrice;    }    public void setBookPrice(Float bookPrice) {        this.bookPrice = bookPrice;    }        @Override    public String toString() {        return "MyBook [sn=" + sn + ", bookName=" + bookName + ", bookPrice=" + bookPrice + "]";    }}

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:tx="http://www.springframework.org/schema/tx"     xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context.xsd        http://www.springframework.org/schema/tx        http://www.springframework.org/schema/tx/spring-tx.xsd">    <!-- 指定须要扫描的包(包含子包),使注解失效 -->    <context:component-scan base-package="com.dao"/>    <context:component-scan base-package="com.controller"/>    <!-- 配置数据源 -->    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">            <property name="driverClassName" value="com.mysql.jdbc.Driver" />            <property name="url" value="jdbc:mysql://localhost:3306/springtest?characterEncoding=utf8&amp;useSSL=false"/>            <property name="username" value="root" />            <property name="password" value="123456" />            <!-- 最大连接数 -->            <property name="maxTotal" value="30"/>            <!-- 最大闲暇连接数 -->            <property name="maxIdle" value="10"/>            <!-- 初始化连接数 -->            <property name="initialSize" value="5"/>    </bean>    <!-- 增加事务反对 -->    <bean id="txManager"           class="org.springframework.jdbc.datasource.DataSourceTransactionManager">           <property name="dataSource" ref="dataSource" />       </bean>     <!-- 开启事务注解-->    <tx:annotation-driven transaction-manager="txManager" />     <!-- 配置MyBatis工厂,同时指定数据源,并与MyBatis完满整合 -->       <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">          <property name="dataSource" ref="dataSource" />          <!-- configLocation的属性值为MyBatis的外围配置文件 -->        <property name="configLocation" value="classpath:com/mybatis/mybatis-config.xml"/>    </bean>      <!--Mapper代理开发,应用Spring主动扫描MyBatis的接口并拆卸     (Spring将指定包中所有被@Mapper注解标注的接口主动拆卸为MyBatis的映射接口)  -->      <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">         <!-- mybatis-spring组件的扫描器 -->         <property name="basePackage" value="com.dao"/>         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>     </bean></beans>

log4j.properties

# Global logging configurationlog4j.rootLogger=ERROR, stdout# MyBatis logging configuration...log4j.logger.com.dao=DEBUG# Console output...log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n