基于之前的spring项目,引入mybatis作为数据层基本框架
1. 引入mybatis依赖
3.3.0 1.2.3 org.mybatis mybatis-spring ${mybatis-spring.version} org.mybatis mybatis ${mybatis.version} - <>>
- <>>3.3.0
- <>>1.2.3
- <>>
- <>>org.mybatis
- <>>mybatis-spring
- <>>${mybatis-spring.version}
- <>>
- <>>org.mybatis
- <>>mybatis
- <>>${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
- 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
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//...}
- 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
- //...
- }
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);}
- 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);
- }
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} )
- //通过配置文件将 数据库表 与 对象、Dao关联起来
- <> namespace='com.zmannotes.spring.mybatis.dao.StockMapper' >
- <> id='BaseResultMap' type='com.zmannotes.spring.mybatis.domain.Stock' >
- <> column='code' property='code' jdbcType='VARCHAR' />
- <> column='name' property='name' jdbcType='VARCHAR' />
- <> column='count' property='count' jdbcType='INTEGER' />
- <> column='main_business' property='mainBusiness' jdbcType='VARCHAR' />
- <> column='create_time' property='createTime' jdbcType='TIMESTAMP' />
- <> column='price' property='price' jdbcType='DECIMAL' />
-
- <> id='Base_Column_List' >
- code, name, count, main_business, create_time, price
-
- <> id='selectByPrimaryKey' resultMap='BaseResultMap' parameterType='java.lang.String' >
- select
- <> refid='Base_Column_List' />
- from stock
- where code = #{code,jdbcType=VARCHAR}
-
- <> id='deleteByPrimaryKey' parameterType='java.lang.String' >
- delete from stock
- where code = #{code,jdbcType=VARCHAR}
-
- <> id='insert' parameterType='com.zmannotes.spring.mybatis.domain.Stock' >
- 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}
- )
-
//通过配置文件将 数据库表 与 对象、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 - <> xmlns='http://www.springframework.org/schema/beans'
- xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 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/tx
- http://www.springframework.org/schema/tx/spring-tx.xsd'>
-
- <> id='stock_dataSource' class='org.apache.commons.dbcp2.BasicDataSource'
- destroy-method='close'>
- <> name='driverClassName' value='com.mysql.jdbc.Driver' />
- <> name='url' value='jdbc:mysql://123.57.144.1:3306/stock' />
- <> name='username' value='stock' />
- <> name='password' value='stock' />
- <> name='connectionInitSqls'>
- <>>
- <>>set names utf8mb4;
-
-
-
-
- <> id='stock_txManager'
- class='org.springframework.jdbc.datasource.DataSourceTransactionManager'>
- <> name='dataSource' ref='stock_dataSource' />
-
- <> transaction-manager='stock_txManager'
- mode='proxy' proxy-target-class='true' />
-
-
- <> id='stock_sqlSessionFactory' class='org.mybatis.spring.SqlSessionFactoryBean'>
- <> name='dataSource' ref='stock_dataSource' />
- <> name='typeAliasesPackage'
- value='com.zmannotes.spring.mybatis.domain' />
-
- <> name='mapperLocations'>
- <>>
- <>>classpath:mybatis/stock/*.xml
-
-
-
-
-
- <> class='org.mybatis.spring.mapper.MapperScannerConfigurer'>
- <> name='basePackage'>
- <>>
- com.zmannotes.spring.mybatis.dao
-
-
- <> 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); }}
- @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);
- }
- }
@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