分享

Spring Mybatis

 天地因心 2016-12-27

基于之前的spring项目,引入mybatis作为数据层基本框架

1. 引入mybatis依赖

3.3.0 1.2.3 org.mybatis mybatis-spring ${mybatis-spring.version} org.mybatis mybatis ${mybatis.version}
  1. >
  2. >3.3.0
  3. >1.2.3
  4. >
  5. >org.mybatis
  6. >mybatis-spring
  7. >${mybatis-spring.version}
  8. >
  9. >org.mybatis
  10. >mybatis
  11. >${mybatis.version}
3.3.0 1.2.3 org.mybatis mybatis-spring ${mybatis-spring.version} org.mybatis mybatis ${mybatis.version}

 2. 创建Domain类

2.1 表结构

CREATE TABLE `stock` ( `code` varchar(10) NOT NULL, `name` varchar(10) NOT NULL, `count` int(11) DEFAULT NULL, `main_business` varchar(256) DEFAULT NULL, `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `price` decimal(10,2) DEFAULT NULL, PRIMARY KEY (`code`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
  1. CREATE TABLE `stock` (
  2. `code` varchar(10) NOT NULL,
  3. `name` varchar(10) NOT NULL,
  4. `count` int(11) DEFAULT NULL,
  5. `main_business` varchar(256) DEFAULT NULL,
  6. `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  7. `price` decimal(10,2) DEFAULT NULL,
  8. PRIMARY KEY (`code`)
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
CREATE TABLE `stock` ( `code` varchar(10) NOT NULL, `name` varchar(10) NOT NULL, `count` int(11) DEFAULT NULL, `main_business` varchar(256) DEFAULT NULL, `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `price` decimal(10,2) DEFAULT NULL, PRIMARY KEY (`code`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

2.2 Stock.java

package com.zmannotes.spring.mybatis.domain;public class Stock { private String code; private String name; private Integer count; private String mainBusiness; private Date createTime; private BigDecimal price;//setter and getter//...}
  1. package com.zmannotes.spring.mybatis.domain;
  2. public class Stock {
  3. private String code;
  4. private String name;
  5. private Integer count;
  6. private String mainBusiness;
  7. private Date createTime;
  8. private BigDecimal price;
  9. //setter and getter
  10. //...
  11. }
package com.zmannotes.spring.mybatis.domain;public class Stock { private String code; private String name; private Integer count; private String mainBusiness; private Date createTime; private BigDecimal price;//setter and getter//...}

 3. 创建Dao(Mapper)

package com.zmannotes.spring.mybatis.dao;import com.zmannotes.spring.mybatis.domain.Stock;public interface StockMapper { //根据PK删除 int deleteByPrimaryKey(String code); //插入新纪录 int insert(Stock record); //根据PK查询 Stock selectByPrimaryKey(String code);}
  1. package com.zmannotes.spring.mybatis.dao;
  2. import com.zmannotes.spring.mybatis.domain.Stock;
  3. public interface StockMapper {
  4. //根据PK删除
  5. int deleteByPrimaryKey(String code);
  6. //插入新纪录
  7. int insert(Stock record);
  8. //根据PK查询
  9. Stock selectByPrimaryKey(String code);
  10. }
package com.zmannotes.spring.mybatis.dao;import com.zmannotes.spring.mybatis.domain.Stock;public interface StockMapper { //根据PK删除 int deleteByPrimaryKey(String code); //插入新纪录 int insert(Stock record); //根据PK查询 Stock selectByPrimaryKey(String code);}

 4. 配置映射文件

//通过配置文件将 数据库表 与 对象、Dao关联起来 code, name, count, main_business, create_time, price delete from stock where code = #{code,jdbcType=VARCHAR} insert into stock (code, name, count, main_business, create_time, price ) values (#{code,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{count,jdbcType=INTEGER}, #{mainBusiness,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{price,jdbcType=DECIMAL} )
  1. //通过配置文件将 数据库表 与 对象、Dao关联起来
  2. namespace='com.zmannotes.spring.mybatis.dao.StockMapper' >
  3. id='BaseResultMap' type='com.zmannotes.spring.mybatis.domain.Stock' >
  4. column='code' property='code' jdbcType='VARCHAR' />
  5. column='name' property='name' jdbcType='VARCHAR' />
  6. column='count' property='count' jdbcType='INTEGER' />
  7. column='main_business' property='mainBusiness' jdbcType='VARCHAR' />
  8. column='create_time' property='createTime' jdbcType='TIMESTAMP' />
  9. column='price' property='price' jdbcType='DECIMAL' />
  10. id='Base_Column_List' >
  11. code, name, count, main_business, create_time, price
  12. id='selectByPrimaryKey' resultMap='BaseResultMap' parameterType='java.lang.String' >
  13. select
  14. refid='Base_Column_List' />
  15. from stock
  16. where code = #{code,jdbcType=VARCHAR}
  17. id='deleteByPrimaryKey' parameterType='java.lang.String' >
  18. delete from stock
  19. where code = #{code,jdbcType=VARCHAR}
  20. id='insert' parameterType='com.zmannotes.spring.mybatis.domain.Stock' >
  21. insert into stock (code, name, count,
  22. main_business, create_time, price
  23. )
  24. values (#{code,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{count,jdbcType=INTEGER},
  25. #{mainBusiness,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{price,jdbcType=DECIMAL}
  26. )
//通过配置文件将 数据库表 与 对象、Dao关联起来 code, name, count, main_business, create_time, price delete from stock where code = #{code,jdbcType=VARCHAR} insert into stock (code, name, count, main_business, create_time, price ) values (#{code,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{count,jdbcType=INTEGER}, #{mainBusiness,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{price,jdbcType=DECIMAL} )

5. 配置数据源及SessionFactory

set names utf8mb4; classpath:mybatis/stock/*.xml com.zmannotes.spring.mybatis.dao
  1. xmlns='http://www./schema/beans'
  2. xmlns:xsi='http://www./2001/XMLSchema-instance' xmlns:tx='http://www./schema/tx'
  3. xsi:schemaLocation='
  4. http://www./schema/beans
  5. http://www./schema/beans/spring-beans.xsd
  6. http://www./schema/tx
  7. http://www./schema/tx/spring-tx.xsd'>
  8. id='stock_dataSource' class='org.apache.commons.dbcp2.BasicDataSource'
  9. destroy-method='close'>
  10. name='driverClassName' value='com.mysql.jdbc.Driver' />
  11. name='url' value='jdbc:mysql://123.57.144.1:3306/stock' />
  12. name='username' value='stock' />
  13. name='password' value='stock' />
  14. name='connectionInitSqls'>
  15. >
  16. >set names utf8mb4;
  17. id='stock_txManager'
  18. class='org.springframework.jdbc.datasource.DataSourceTransactionManager'>
  19. name='dataSource' ref='stock_dataSource' />
  20. transaction-manager='stock_txManager'
  21. mode='proxy' proxy-target-class='true' />
  22. id='stock_sqlSessionFactory' class='org.mybatis.spring.SqlSessionFactoryBean'>
  23. name='dataSource' ref='stock_dataSource' />
  24. name='typeAliasesPackage'
  25. value='com.zmannotes.spring.mybatis.domain' />
  26. name='mapperLocations'>
  27. >
  28. >classpath:mybatis/stock/*.xml
  29. class='org.mybatis.spring.mapper.MapperScannerConfigurer'>
  30. name='basePackage'>
  31. >
  32. com.zmannotes.spring.mybatis.dao
  33. name='sqlSessionFactoryBeanName' value='stock_sqlSessionFactory' />
set names utf8mb4; classpath:mybatis/stock/*.xml com.zmannotes.spring.mybatis.dao

6. 完成单测

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = '/spring/stock-session-factory.xml')public class StockTest { @Autowired private StockMapper stockMapper; /**插入一条数据并自动回滚*/ @Transactional @Test public void test(){ Stock stock = new Stock(); stock.setCode('900001'); stock.setName('tcl'); stockMapper.insert(stock); }}
  1. @RunWith(SpringJUnit4ClassRunner.class)
  2. @ContextConfiguration(locations = '/spring/stock-session-factory.xml')
  3. public class StockTest {
  4. @Autowired
  5. private StockMapper stockMapper;
  6. /**插入一条数据并自动回滚*/
  7. @Transactional
  8. @Test
  9. public void test(){
  10. Stock stock = new Stock();
  11. stock.setCode('900001');
  12. stock.setName('tcl');
  13. stockMapper.insert(stock);
  14. }
  15. }
@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = '/spring/stock-session-factory.xml')public class StockTest { @Autowired private StockMapper stockMapper; /**插入一条数据并自动回滚*/ @Transactional @Test public void test(){ Stock stock = new Stock(); stock.setCode('900001'); stock.setName('tcl'); stockMapper.insert(stock); }}

源码Github

Q&A

Q:无聊的2~4步有没有快捷完成办法?

A:当然有!那就是Mybatis Generator,自动生成2~4所有代码。参考 LINK

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约