Spring Boot常见企业开发场景应用、自动配置原理结构分析(一)https://developer.aliyun.com/article/1423059
- 编写DAO
public interface UserDao { User get(int id); List findAll(); void add(User user); } @Repository public class UserDaoImpl extends HibernateDaoSupport implements UserDao{ // 注入SessionFactory @Autowired public void autoWiredFactory(SessionFactory sessionFactory) { super.setSessionFactory(sessionFactory); } @Override public User get(int id) { return getHibernateTemplate().get(User.class, id); } @Override public List findAll() { return getHibernateTemplate().findByExample(new User()); } @Override public void add(User user) { getHibernateTemplate().save(user); } }
- 编写Service
public interface UserService { /** * 根据ID获取用户 * @param i * @return */ User get(int id); /** * 查询所有用户 * @return */ List findAll(); /** * 新增用户 * @param user */ void add(User user); } @Service @Transactional public class UserServiceImpl implements UserService{ @Autowired private UserDao userDao; @Override public User get(int id) { return userDao.get(id); } @Override public List findAll() { return userDao.findAll(); } @Override public void add(User user) { userDao.add(user); } }
- 编写Controller/Handler
@Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping("/findUserList") public String findUserList(Model model) { List list = userService.findAll(); model.addAttribute("list", list); return "/index.jsp"; } }
- JSP页面参见Servlet/JSP案例
- 编写Spring Boot入口
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class); } @Bean @ConfigurationProperties(prefix="c3p0") public ComboPooledDataSource c3p0DataSource() throws PropertyVetoException { return new ComboPooledDataSource(); } @Bean @ConfigurationProperties(prefix="hibernate") public LocalSessionFactoryBean sessionFactory() throws PropertyVetoException { LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean(); sessionFactoryBean.setDataSource(c3p0DataSource()); return sessionFactoryBean; } @Bean public HibernateTransactionManager transactionManager() throws PropertyVetoException { HibernateTransactionManager tx = new HibernateTransactionManager(); tx.setSessionFactory(sessionFactory().getObject()); return tx; } }
- 注意:此处因为Hibernate没有Starter起步依赖,所以我使用了Java配置来整合Hibernate。第一个Bean是C3P0数据源,第二个Bean是SessionFactory,第三个Bean是事务管理器。
- 编写配置文件
server.port=10086 server.context-path=/ c3p0.driverClass=com.mysql.jdbc.Driver c3p0.jdbcUrl=jdbc:mysql:///springboot c3p0.user=root c3p0.password=000000 hibernate.packagesToScan=com.itheima.springboot.entity
构建SSM应用(Spring、Spring MVC、MyBatis)
为了简单起见,这里使用逆向工程生成实体类、Mapper接口、Mapper映射文件。因为查询实体、映射文件的代码比较长,这里就不把代码贴上来了,大家自己使用逆向工程生成下就OK。
- 导入依赖
org.springframework.boot spring-boot-starter-parent 1.5.14.RELEASE org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-jdbc org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.1 org.apache.tomcat.embed tomcat-embed-jasper provided mysql mysql-connector-java 5.1.6 javax.servlet jstl
- Service代码
public interface UserService { /** * 根据ID获取用户 * @param i * @return */ TUser get(int id); /** * 查询所有用户 * @return */ List findAll(); /** * 新增用户 * @param user */ void add(TUser user); } @Service @Transactional public class UserServiceImpl implements UserService{ @Autowired private TUserMapper userMapper; @Override public TUser get(int id) { return userMapper.selectByPrimaryKey(id); } @Override public List findAll() { return userMapper.selectByExample(null); } @Override public void add(TUser user) { userMapper.insert(user); } }
- Controller代码
@Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping("/findUserList") public String findUserList(Model model) { List list = userService.findAll(); model.addAttribute("list", list); return "/index.jsp"; } }
- Spring Boot入口应用
@SpringBootApplication @MapperScan(basePackages="com.itheima.springboot.mapper") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class); } }
- 注意:Spring Boot整合MyBatis需要在Application类上添加@MapperScan,否则不会为Mapper创建代理对象,执行程序失败。
- 配置文件
server.port=10086 server.context-path=/ #数据库配置 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql:///springboot spring.datasource.username=root spring.datasource.password=000000
- 这里使用默认的数据源,如果想要使用其他的数据源参照之前的配置即可
- 访问http://localhost:10086/user/findUserList
构建SSJPA应用(Spring、Spring MVC、Spring Data JPA)
- 导入Maven依赖
org.springframework.boot spring-boot-starter-parent 1.5.14.RELEASE org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-data-jpa mysql mysql-connector-java 5.1.6 javax.servlet jstl org.apache.tomcat.embed tomcat-embed-jasper c3p0 c3p0 0.9.1
- 注意:导入了
spring-boot-starter-data-jpa
依赖 - 编写Java实体类,参考SSH整合JPA实体类
- 编写DAO
public interface UserRepository extends JpaRepository{ }
- (这个代码是真的喜欢)
- 编写Service
public interface UserService { /** * 根据ID获取用户 * @param i * @return */ User get(int id); /** * 查询所有用户 * @return */ List findAll(); /** * 新增用户 * @param user */ void add(User user); } 1. 编写Controller @Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping("/findUserList") public String findUserList(Model model) { List list = userService.findAll(); model.addAttribute("list", list); return "/index.jsp"; } } 1. 编写入口 @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class); } @Bean(name="datasource") @Primary @ConfigurationProperties(prefix="c3p0") public ComboPooledDataSource c3p0DataSource() throws PropertyVetoException { return new ComboPooledDataSource(); } } 1. 配置文件 server.port=10086 server.context-path=/ c3p0.driverClass=com.mysql.jdbc.Driver c3p0.jdbcUrl=jdbc:mysql:///springboot c3p0.user=root c3p0.password=000000 构建FreeMarker应用程序 1. 导入依赖 org.springframework.boot spring-boot-starter-parent 1.5.14.RELEASE org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-data-jpa mysql mysql-connector-java 5.1.6 javax.servlet jstl org.apache.tomcat.embed tomcat-embed-jasper c3p0 c3p0 0.9.1 org.springframework.boot spring-boot-starter-freemarker
- 多导入了
spring-boot-starter-freemarker
起步依赖 - 编写DAO
public interface UserRepository extends JpaRepository{ } 1. 编写Service public interface UserService { /** * 根据ID获取用户 * @param i * @return */ User get(int id); /** * 查询所有用户 * @return */ List findAll(); /** * 新增用户 * @param user */ void add(User user); } @Service @Transactional public class UserServiceImpl implements UserService{ @Autowired private UserRepository userRepository; @Override public User get(int id) { return userRepository.findOne(id); } @Override public List findAll() { return userRepository.findAll(); } @Override public void add(User user) { userRepository.save(user); } } 1. 编写Controller @Controller @RequestMapping("/user") public class UserController { // 静态页面输出到的目录 @Value("${freemarker.output_path}") private String OUTPUT_PATH; @Autowired private UserService userService; // 获取FreeMarker配置类 @Autowired private Configuration configuration; @RequestMapping("/genPage") @ResponseBody public Map genPage() throws Exception { List list = userService.findAll(); Map model = new HashMap(); model.put("list", list); Template template = configuration.getTemplate("user_list.ftl"); template.process(model, new FileWriter(OUTPUT_PATH + "userList.html")); Map result = new HashMap(); result.put("success", true); result.put("message", "生成页面成功!"); return result; } } 1. 编写入口 @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class); } @Bean(name="datasource") @Primary @ConfigurationProperties(prefix="c3p0") public ComboPooledDataSource c3p0DataSource() throws PropertyVetoException { return new ComboPooledDataSource(); } } 1. 编写配置文件 server.port=10086 server.context-path=/ # FreeMarker静态页面输出目录 freemarker.output_path=G:/workspace/free_test/t49/src/main/webapp/ c3p0.driverClass=com.mysql.jdbc.Driver c3p0.jdbcUrl=jdbc:mysql:///springboot c3p0.user=root c3p0.password=000000 1. 编写FreeMarker模板,此模板默认放在classpath下的template/user_list.ftl中 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> JSP测试 <#list list as user> ID 用户名 密码 ${user.id} ${user.username} ${user.password} 1. 访问http://localhost:10086/user/genPage,然后检查HTML页面是否生成 构建基于Redis缓存应用程序 1. 导入依赖 org.springframework.boot spring-boot-starter-parent 1.5.14.RELEASE 1.8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-data-jpa mysql mysql-connector-java 5.1.6 javax.servlet jstl org.apache.tomcat.embed tomcat-embed-jasper c3p0 c3p0 0.9.1 org.springframework.boot spring-boot-starter-data-redis 1. 要开发导入Redis起步依赖spring-boot-starter-data-redis 2. 编写DAO public interface UserRepository extends JpaRepository{ } 1. 编写Service public interface UserService { /** * 根据ID获取用户 * @param i * @return */ User get(int id); /** * 查询所有用户 * @return */ List findAll(); /** * 新增用户 * @param user */ void add(User user); } @Service @Transactional public class UserServiceImpl implements UserService{ @Autowired private UserRepository userRepository; @Autowired private RedisTemplate redisTemplate; @Override public User get(int id) { return userRepository.findOne(id); } @Override public List findAll() { Long size = redisTemplate.boundListOps("userList").size(); List userList = redisTemplate.boundListOps("userList").range(0, size); if(userList == null || size == 0) { System.out.println("从数据库中获取数据..."); userList = userRepository.findAll(); System.out.println("将数据放入缓存..."); redisTemplate.boundListOps("userList").rightPushAll(userList.toArray(new User[0])); return userList; } else { System.out.println("从缓存中获取数据..."); return userList; } } @Override public void add(User user) { userRepository.save(user); } } 1. 编写Controller @Controller @RequestMapping("/user") public class UserController { @Value("${freemarker.output_path}") private String OUTPUT_PATH; @Autowired private UserService userService; @RequestMapping("/findUserList") public String findUserList(Model model) { List list = userService.findAll(); model.addAttribute("list", list); return "/index.jsp"; } } 1. 编写Spring Boot入口 @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class); } @Bean(name="datasource") @Primary @ConfigurationProperties(prefix="c3p0") public ComboPooledDataSource c3p0DataSource() throws PropertyVetoException { ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource(); return comboPooledDataSource; } } 1. 编写配置文件 server.port=10086 server.context-path=/ c3p0.driverClass=com.mysql.jdbc.Driver c3p0.jdbcUrl=jdbc:mysql:///springboot c3p0.user=root c3p0.password=000000 1. 启动Redis 2. 访问http://localhost:10086/user/findUserList,注意控制台的变化 构建基于ActiveMQ消息队列应用程序 1. 导入依赖 org.springframework.boot spring-boot-starter-parent 1.5.14.RELEASE org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-data-jpa mysql mysql-connector-java 5.1.6 javax.servlet jstl org.apache.tomcat.embed tomcat-embed-jasper c3p0 c3p0 0.9.1 org.springframework.boot spring-boot-starter-freemarker org.springframework.boot spring-boot-starter-activemq com.alibaba fastjson 1.2.28
Spring Boot常见企业开发场景应用、自动配置原理结构分析(三)https://developer.aliyun.com/article/1423061