springboot整合框架(二)

springboot整合mybatis(xml配置方式)

 <!-- springboot整合mybatis -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.1</version>
	    </dependency>
	    
<!-- MySQL -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		
<!-- alibaba的druid数据库连接池 -->
		 <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.11</version>
        </dependency>
        
 <!-- 分页插件 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.1.2</version>
        </dependency>
        
<!-- @Param注解在该包中 -->
	    <dependency>
		    <groupId>org.apache.ibatis</groupId>
		    <artifactId>ibatis-core</artifactId>
		    <version>3.0</version>
		</dependency>

application.yml

#数据源配置:
spring:
    datasource:
        name: test
        url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8
        username: root
        password: root
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver
        filters: stat
        maxActive: 20
        initialSize: 1
        maxWait: 60000
        minIdle: 1
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: select 'x'
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
        maxOpenPreparedStatements: 20
#Mybatis的配置
mybatis:
  #"*.xml"表示扫描"mapper"目录下的所有以".xml"结尾的文件
  mapper-locations: classpath:mapper/*.xml
  #配置别名
  #type-aliases-package: com.yunxiang.pojo
  config-location: classpath:mybatis/SqlMapConfig.xml
#PageHelper分页插件
 pagehelper:
   helperDialect: mysql
   reasonable: true
   supportMethodsArguments: true
   params: count=countSql

注:使用".yml"格式的全局配置文件时,各配置的第一个关键字必须顶格写(“spring:”、“mybatis:”、" pagehelper:“);并且赋值时”:"后面必须有一个空格。

SqlMapConfig.xml

#Mybatis配置文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    
</configuration>

注:springboot整合mybatis(xml配置方式)时,"mapper.xml"文件需要放置在"src/main/resources"路径下,“mapper.java"要放置在"src/main/java"路径下,并且在springboot的启动类中要使用”@MapperScan(“com.yunxiang.mapper”)“注解来扫描"mapper.java”。

springboot整合mybatis(注解方式)

		<!-- springboot整合mybatis,注解版 -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.1</version>
	    </dependency>
	   
		<!-- MySQL -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>

application.properties

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf-8

UserMapper.java

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import com.yunxiang.pojo.User;


public interface UserMapper {
   
	@Select("select * from user where name = #{name}")
	User findUserByName(@Param("name") String name);
	
	@Insert("insert into user(name, sex,address,brithday) values(#{user.name},#{user.sex},#{user.address},#{user.brithday})")
	void addUser(@Param("user")User name);
}

User.java

import java.util.Date;

public class User {
    private Integer id;

    private String name;

    private Date brithday;

    private String sex;

    private String address;

    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 == null ? null : name.trim();
    }

    public Date getBrithday() {
        return brithday;
    }

    public void setBrithday(Date brithday) {
        this.brithday = brithday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex == null ? null : sex.trim();
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address == null ? null : address.trim();
    }
}

UserService .java

public interface UserService {
	
	User findUserByname(String name);
	
	void addUser(User user);

}

UserServiceImpl.java

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

import com.yunxiang.mapper.UserMapper;
import com.yunxiang.pojo.User;
import com.yunxiang.service.UserService;

@Service
public class UserServiceImpl implements UserService {

	@Autowired
	private UserMapper userMapper;
	
	@Override
	public User findUserByname(String name) {
		User user = userMapper.findUserByName(name);
		return user;
	}

	@Override
	public void addUser(User user) {
		userMapper.addUser(user);
	}

}

UserController.java

import java.util.Date;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.yunxiang.pojo.User;
import com.yunxiang.service.UserService;

@Controller
public class UserController {
	
	@Autowired
	private UserService userService;
	
	@RequestMapping("/findUser/{name}")
	@ResponseBody
	public User findUserByName(@PathVariable String name){
		
		User user = userService.findUserByname(name);
		return user;
	}
	
	@RequestMapping("/addUser")
	@ResponseBody
	public String addUser(){
		User user = new User();
		user.setName("小花");
		user.setSex("男");
		user.setBrithday(new Date());
		user.setAddress("河南信阳");
		userService.addUser(user);
		return "success";
	}
}

SpringApplications.java

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication(scanBasePackages="com.yunxiang")
@MapperScan("com.yunxiang.mapper")
public class SpringApplications {
	
	public static void main(String[] args) {
		SpringApplication.run(SpringApplications.class, args);
	}
}

注:springboot整合mybatis,使用注解方式方式时,可以不需要mappe.xml文件,可以在接口中直接使用"@Select"、“@Insert”、“@Update”、“@Delete"标签在对应的抽象方法上直接写出对应的SQL语句即可。同时在springboot的启动类中要使用”@MapperScan(“com.yunxiang.mapper”)“注解来扫描"mapper.java”。

springboot区分多数据源

在springboot中,如果当项目需要使用不同的数据库时,可以通过配置文件的方式来区分多数据源的目的。
application.properties

#SpringBoot整合多数据源
spring.datasource.test.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.test.username=root
spring.datasource.test.password=root
spring.datasource.test.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf-8

spring.datasource.taotao.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.taotao.username=root
spring.datasource.taotao.password=root
spring.datasource.taotao.url=jdbc:mysql://localhost:3306/taotao?characterEncoding=utf-8

注:因为springboot默认配置中没有"spring.datasource.test.driver-class-name"等属性,所有必须自己将各个数据库注入当springboot容器中。
注册数据库信息

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

//注册到Spring容器中
//指明当前类是通过配置文件
@Configuration
/*
 * 指明该数据库接口的扫描包,
 * 接口就写在"com.yunxiang.test.mapper"中
 */
@MapperScan(basePackages="com.yunxiang.test.mapper",sqlSessionFactoryRef="testSqlSessionFactory")
/*
 * 因为要配置多个数据库信息,在加载时,容器不知道加载另一个,
 * 使用@Primary注解修修饰的那个接口实现类可以默认优先选择
 */
 
@Primary
public class DataSource1 {
	
	//private DataSource1(){}

	
    @Bean(name="testDatasource")
    //获取数据库信息
    @ConfigurationProperties(prefix="spring.datasource.test")
    @Primary
    public DataSource testDatasource() {
        return DataSourceBuilder.create().build();
    }
    /**
     * 创建SqlSessionFactory
     * @param dataSource
     * @return
     * @throws Exception
     */
    @Bean(name="testSqlSessionFactory")
    @Primary
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("testDatasource")DataSource dataSource) 
            throws Exception {
        SqlSessionFactoryBean bean=new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        return bean.getObject();
    }
    /**
     * 配置事务管理
     */
    @Bean(name="testTransactionManager")
    @Primary
    public DataSourceTransactionManager testTransactionManager(
            @Qualifier("testDatasource")DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
 
    @Bean(name="testSqlSessionTemplate")
    @Primary
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("testSqlSessionFactory")
    SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}
import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

@Configuration
@MapperScan(basePackages="com.yunxiang.taotao.mapper",sqlSessionFactoryRef="taotaoSqlSessionFactory")
public class DataSource2 {

	/**
     * 配置taotao数据库
     * @return
     */
    @Bean(name="taotaoDatasource")
    @ConfigurationProperties(prefix="spring.datasource.taotao")
    public DataSource testDatasource() {
        return DataSourceBuilder.create().build();
    }
    /**
     * 创建SqlSessionFactory
     * @param dataSource
     * @return
     * @throws Exception
     */
    @Bean(name="taotaoSqlSessionFactory")
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("taotaoDatasource")DataSource dataSource) 
            throws Exception {
        SqlSessionFactoryBean bean=new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //如果还有分页等其他事务
//      bean.setMapperLocations(new PathMatchingResourcePatternResolver().
//              getResources("classpath:mybatis/test1/*.xml"));
        return bean.getObject();
    }
    /**
     * 配置事务管理
     */
    @Bean(name="taotaoTransactionManager")
    public DataSourceTransactionManager testTransactionManager(
            @Qualifier("taotaoDatasource")DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
 
    @Bean(name="taotaoSqlSessionTemplate")
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("taotaoSqlSessionFactory")
    SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

注:在配置好全局配置信息和定义好数据库信息后,其他的就和别的一样。

springboot中的事务管理

在springboot中,默认配置好了事务,当某个方法需要使用事务控制时,只需要在该方法上使用"@Transactional"注解,也可以在当前类上使用"@Transactional"注解。当在方法上使用"@Transactional"注解时,表示只有该方法才会支持事务控制;当在方法上使用"@Transactional"注解时,表示该类的所有方法都支持事务控制。

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

import com.yunxiang.mapper.UserMapper;
import com.yunxiang.pojo.User;
import com.yunxiang.service.UserService;

@Service
public class UserServiceImpl implements UserService {

	@Autowired
	private UserMapper userMapper;
	
	@Override
	public User findUserByname(String name) {
		User user = userMapper.findUserByName(name);
		return user;
	}
	//添加事务控制
	@Transactional
	@Override
	public void addUser(User user) {
		userMapper.addUser(user);
		int i = 1 / 0;

	}

}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.yunxiang.mapper.UserMapper;
import com.yunxiang.pojo.User;
import com.yunxiang.service.UserService;

@Service
@Transactional
public class UserServiceImpl implements UserService {

	@Autowired
	private UserMapper userMapper;
	
	@Override
	public User findUserByname(String name) {
		User user = userMapper.findUserByName(name);
		return user;
	}

	
	@Override
	public void addUser(User user) {
		userMapper.addUser(user);
		int i = 1 / 0;

	}

}

springboot整合JPA-Hibernate

pom

<!-- springboot整合jpa -->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-jpa</artifactId>
      </dependency>
      <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
       </dependency>

application.properties

#让控制器输出json字符串格式
spring.datasource.test.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.test.username=root
spring.jackson.serialization.indent-output=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

创建实体类

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="t_user")
public class User {

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer id;

	@Column(name="username")
    private String name;

    private Date brithday;

    private String sex;

    private String address;

	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 Date getBrithday() {
		return brithday;
	}

	public void setBrithday(Date brithday) {
		this.brithday = brithday;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}  
}

注:“@Entity"注解,表示springboot会在数据库中创建一种数据表,如果没有使用”@Table(name=“t_user”)“注解来命名,就以实体类的类名为数据表的表名。”@Id"注解表示指明该属性值为主键;“@GeneratedValue"注解表示主键的生成策略。”@Column(name=“username”)"注解表示指明数据表中的字段名,如果不写此参数,则字段名为属性名。
UserDao

import org.springframework.data.jpa.repository.JpaRepository;

import com.yunxiang.pojo.User;

public interface UserDao extends JpaRepository<User, Integer> {

}

注:使用jpa时,dao成只写接口,并且所有的接口对象都有继承"JpaRepository"类,该类中定义了jpa操作数据库的一些方法。
启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@SpringBootApplication(scanBasePackages="com.yunxiang")
//扫描实体类
@EntityScan("com.yunxiang.pojo")
//扫描dao层
@EnableJpaRepositories("com.yunxiang.dao")
public class SpringApplications {
	
	public static void main(String[] args) {
		SpringApplication.run(SpringApplications.class, args);
	}

}

注:在springboot整合JPA-Hibernate中,可以根据pojo对象类直接在数据库中创建数据表,并且在启动类中使用"@EntityScan(“com.yunxiang.pojo”)"注解来扫描pojo对象,使用@EnableJpaRepositories(“com.yunxiang.dao”)注解来扫描dao层。别的层的操作都一致。

springboot整合Email

pom

<!-- 邮件依赖 -->
     <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-mail</artifactId>
     </dependency>

application.properties

#JavaMailSender 邮件发送的配置
#如果使用163邮箱 ,修改成smtp.163.com,
spring.mail.host=smtp.qq.com
spring.mail.username=183434043@qq.com
spring.mail.password=ahexjedcxzyybhfe
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
#若使用QQ邮箱发送邮件,则需要修改为spring.mail.host=smtp.qq.com,同时spring.mail.password改为QQ邮箱的授权码。
#QQ邮箱->设置->账户->POP3/SMTP服务:开启服务后会获得QQ的授权码 

EmailConfig.java

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

//指明该类是一个配置文件
@Component
public class EmailConfig {

	//定义发件人
	@Value("${spring.mail.username}")
	private String emailfrom;

	public String getEmailfrom() {
		return emailfrom;
	}

	public void setEmailfrom(String emailfrom) {
		this.emailfrom = emailfrom;
	}
	
}

EmailService.java

import java.io.File;

public interface EmailService {

	//发送简单的邮件,只含有文本的邮件
	public void sendSimpleEmail(String sendTo,String title,String content);

	//发送带有附件的邮件
	public boolean sendAttachmentEmail(String sendTo,String title,String content, String filePath);
}

EmailServiceImpl.java

import java.io.File;

import javax.mail.internet.MimeMessage;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import com.yunxiang.email.EmailConfig;
import com.yunxiang.service.EmailService;

@Service
public class EmailServiceImpl implements EmailService {

	@Autowired
	private EmailConfig emailConfig;
	
	@Autowired
	private JavaMailSender emailSender;
	
	@Override
	public void sendSimpleEmail(String sendTo, String title, String content) {
		//简单邮件的方式
		SimpleMailMessage message = new SimpleMailMessage();
		//发送人
		message.setFrom(emailConfig.getEmailfrom());;

		//接收人
		message.setTo(sendTo);
		//发送的主题
		message.setSubject(title);
		//发送的内容
		message.setText(content);
		
		//发送
		emailSender.send(message);
		
		
	}
	@Override
	public boolean sendAttachmentEmail(String sendTo, String title, String content,String filePath) {
		
		File file = new File(filePath);
		boolean flag = file.exists();
		if(flag){
			String fileName = file.getName();
			MimeMessage  msg = emailSender.createMimeMessage();
			try {
				
				MimeMessageHelper helper = new MimeMessageHelper(msg,true);
			
				helper.setFrom(emailConfig.getEmailfrom());
				helper.setTo(sendTo);
				helper.setSubject(title);
				helper.setText(content);
				FileSystemResource r = new FileSystemResource(file);
				/**
				 * 参数1:文件的全名称必须指明文件的后缀,
				 *       如果不指明文件的后缀,则文件会打不开;
				 * 参数2:文件信息。
				 */
				helper.addAttachment(fileName, r);
				emailSender.send(msg);
				
			} catch (Exception e) {
				e.printStackTrace();
			}
			
		}
		return flag;
		
	}
}


EmailController.java



import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.yunxiang.service.EmailService;

@Controller
public class EmailController {

	@Autowired
	private EmailService  emailService;
	
	@RequestMapping("/simple")
	@ResponseBody
	public String sendSimpleEmail(){
		String sendTo = "19837679510@163.com";
		String title = "工作";
		String content = "加油";
		emailService.sendSimpleEmail(sendTo, title, content);
		return "邮件发送成功";
	}
	
	@RequestMapping("/attach")
	@ResponseBody
	public String sendAttachmentEmail(){
		String sendTo = "18839420996@163.com";
		String title = "work";
		String content = "加油";
		String filePath = "c://测试//名单.xlsx";
		emailService.sendAttachmentEmail(sendTo, title, content, filePath);
		return "邮件发送成功";
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值