Spring和MyBatis集成--基于全注解方式

第一步:创建java项目

在这里插入图片描述

第二步:导入依赖包

在这里插入图片描述

第三步:配置db.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/gj1
jdbc.username=root
jdbc.password=123456
jdbc.maxActive=10

第四步:配置log4j.properties

# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
# 配置日志输入   : log4j.logger.映射文件的包 =日志级别5个(error,warin,info,debug,all/trace)
log4j.logger.cn.zj.ssm.mapper=all
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

第五步:配置SpringConfig

package cn.zj.ssm.config;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.Scope;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import com.alibaba.druid.pool.DruidDataSource;

/*
 * 
 * 此类在Spring全注解开发中当做Spring框架的配置类,用于替代applicaitonContext.xml配置文件
 * 
 * ------------------------------------------
 * @Configuration
 * 	把当前类作为Spring框架配置文件类
 * -------------------------------------------
 * @ComponentScan
 * 	配置spring支持注解配置的包扫描注解
 * basePackages :设置包扫描的位置
 *     也可以用value 
 *  简写
 * @ComponentScan("cn.zj.spring")
 * -------------------------------------------
 * @PropertySource()
 * 	用于读取 xx.properties 配置文件,相当于 ;<context:property-placeholder location="classpath:db.properties"/>
 *  value 属性,读取配置文件的属性
 *  注意:value默认可以省略,读取配置文件必须加上前缀    classpath: 
 * -------------------------------------------
 * @Import()
 * 导入其他的配置文件
 * @Import(SpringConfig1.class)	
 * 
 * 
 */
@Configuration
//@ComponentScan(basePackages = {"cn.zj.spring.dao","cn.zj.spring.service","cn.zj.spring.controller"})
@ComponentScan("cn.zj.ssm")
@PropertySource("classpath:db.properties")
@EnableTransactionManagement //设置支持注解配置事务
@MapperScan("cn.zj.ssm.mapper") //使用包扫描创建 Mybatis映射接口的代理对象
public class SpringConfig {
	
	/*
	 * 
	 * @Value 用于读取 xx.properties 配置文件key对象的value
	 * 
	 * @Value(value="xx.properties对应的ky")
	 * 如:
	 * @Value(value="${jdbc.driverClassName}")
	 * 简写
	 * @Value("${jdbc.driverClassName}")
	 * 
	 * 如果开发者不想读取配置文件的key,也可以直接写固定的值
	 */
	
	
	@Value("${jdbc.driverClassName}")
	private String driverClassName;
	
	
	@Value("${jdbc.url}")
	private String url;
	
	@Value("${jdbc.username}")
	private String username;
	
	
	@Value("${jdbc.password}")
	private String password;
	
	
	//@Value("${jdbc.driverClassName}")
	@Value("10")
	private Integer maxActive;
	
	
	
	/*
	 * @Bean 创建Spring的Bean对象。相当于<bean  id="myDataSource" >
	 * 	属性
	 * 		name :设置bena的名称,相当于<bean  name="s1 s2 s3" >
	 * 		initMethod : 设置初始化方法,相当于 <bean init-method="xxx">
	 * 		destroyMethod :设置对象销毁方法,相当于<ben destory-method="xxx">
	 * 
	 */
	@Bean(initMethod = "init",destroyMethod = "close")
	//@Scope("prototype")
	public DataSource getDataSource() {
		System.out.println("创建数据源");
		DruidDataSource dataSouce = new DruidDataSource();
		dataSouce.setDriverClassName(this.driverClassName);
		dataSouce.setUrl(this.url);
		dataSouce.setUsername(this.username);
		dataSouce.setPassword(this.password);
		dataSouce.setMaxActive(this.maxActive);
		return dataSouce;
	}
	
	
	@Bean
	public SqlSessionFactory getSqlSessionFactory() throws Exception {
		
		SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
		
		//设置数据源
		bean.setDataSource(getDataSource());
		
		//设置别名
		bean.setTypeAliasesPackage("cn.zj.ssm.pojo");
		
		
		return bean.getObject();
	}
	
	
	
	
	//创建事务管理器(事务代理对象)
	@Bean
	public PlatformTransactionManager getTxManager() {
		return new DataSourceTransactionManager(getDataSource());
	}
	
	
}

第六步:配置pojo

package cn.zj.ssm.pojo;

public class User {
	private Integer id;
	private String name;
	private String phone;
	private String password;
	private Integer age;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", phone=" + phone + ", password=" + password + ", age=" + age
				+ "]";
	}
	
	
}

第七步:配置UserMapper.java

package cn.zj.ssm.mapper;

import java.util.List;

import cn.zj.ssm.pojo.User;

public interface UserMapper {
	
	@Select("select * from user where id = #{id}")
	public User selectByPrimaryKey(Integer id);
	
	
	@Select("select * from user")
	public List<User> selectList();
	
	@Insert("insert into user(name,age,password,phone)values(#{name},#{age},#{password},#{phone})")
	public int insert(User user);
	
	@Update("update user set name = #{name},age=#{age},phone=#{phone},password=#{password} where id = #{id}")
	public int updateByPrimaryKey(User user);
	
	
	@Delete("delete from user where id = #{id}")
	public int deleteByPrimaryKey(Integer id);
}

第八步:配置UserServiceImpl

package cn.zj.ssm.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import cn.zj.ssm.mapper.UserMapper;
import cn.zj.ssm.pojo.User;
import cn.zj.ssm.service.UserService;

@Service
public class UserServiceImpl implements UserService {

	
	@Autowired
	private UserMapper userMapper;
	/*
	 * 问题: 如何创建UserMaper接口的代理对象?
	 * 
	 * 使用Spring之前
	 * 
	 * 1,创建SqlSessionFactory工厂对象
	 * 	开发者自己读取mybatis-config.xml 创建
	 * 
	 * 2,通过工厂创建SqlSession 会话对象
	 * 
	 * 3,通过SqlSession.getMapper(UserMapper.class)创建接口代理对象?
	 * 
	 * ------------------------------------------------------
	 * 
	 * 使用Spring之后
	 * 
	 * 注 :Spring和其他框架集成一般jar包就是 spring-xxx.jar
	 *  	其他框架和Spring一般jar包就是    xxx-spring.jar
	 *  	这个包一般叫做桥梁包,其他框架和Spring进行整合的中间包
	 * 
	 * 1,创建SqlSessionFactory工厂对象
	 * 	MyBatis框架和Spring集成代码写好,开发者只需配置即可
	 *  
	 *  在mybatis-spring-1.3.1.jar 桥梁包中
	 *  org.mybatis.spring.SqlSessionFactoryBean
	 *  

	 * 2,通过工厂创建SqlSession 会话对象
	 * 	 和Spring集成用配置SqlSession对象
	 * 	在创建映射接口的时候,底层先会自动创建一个SqlSession对象,再通过SqlSession创建映射接口的代理对象
	 * 
	 *   	注意:第2步,跟第3步整合在一起了。
	 * 
	 * 3,通过SqlSession.getMapper(UserMapper.class)创建接口代理对象?
	 * 
	 *   3.1使用包扫描创建多个映射的代理对象
	 * 		org.mybatis.spring.mapper.MapperScannerConfigurer
	 *   3.2创建单个映射接口的代理对象
	 *    	org.mybatis.spring.mapper.MapperFactoryBean<T> 
	 *    
	 *    MapperFactoryBean的getObject返回xxxMapper类。
	 *            而配置sqlSessionFactory的set方法是创键sqlSession对象。
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 */
	
	@Override
	public User selectByPrimaryKey(Integer id) {
		return userMapper.selectByPrimaryKey(id);
	}

	@Override
	public List<User> selectList() {
		return userMapper.selectList();
	}

	@Override
	public int insert(User user) {
		return userMapper.insert(user);
	}

	@Override
	public int updateByPrimaryKey(User user) {
		return userMapper.updateByPrimaryKey(user);
	}

	@Override
	public int deleteByPrimaryKey(Integer id) {
		return userMapper.deleteByPrimaryKey(id);
	}

}

第九步:配置测试类

package cn.zj.ssm.test;

import static org.junit.Assert.*;

import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import cn.zj.ssm.pojo.User;
import cn.zj.ssm.service.UserService;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class UserServiceTest {
	
	@Autowired
	private UserService userService;

	@Test
	public void testSelectByPrimaryKey() {
		
		User user = userService.selectByPrimaryKey(4);
		System.out.println(user);
		
	}

	@Test
	public void testSelectList() {
		List<User> users = userService.selectList();
		
	}

	@Test
	public void testInsert() {
		
	}

	@Test
	public void testUpdateByPrimaryKey() {
		
	}

	@Test
	public void testDeleteByPrimaryKey() {
	}
	

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值