1.不需要多余的配置文件信息
1 2 3 4 5 6 7 8 9 10 11 12 13 application.properties mybatis.type-aliases-package=com.mxxd.SCM.Dao mybatis.mapper-locations=classpath:mybatis/mapper/*.xml spring.datasource.driverClassName = com.mysql.jdbc.Driver spring.datasource.url = jdbc:mysql://localhost:3306/scm?useUnicode=true&characterEncoding=utf-8 spring.datasource.username = root spring.datasource.password = spring.freemarker.template-loader-path=classpath:/template/ spring.freemarker.suffix=.ftl spring.freemarker.cache=false spring.freemarker.charset=UTF-8
Dao层mapper 添加注解 @Repository
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 @Repository public interface UserMapper { //@Select("SELECT * FROM `users` where user_username = #{username} and user_password = #{password}") public UserEntity login(String username, String password); public UserEntity queryUser(String name); public boolean insert(UserEntity user); public boolean update(UserEntity user); public boolean delete(int id); }
mapper.xml文件 添加对应mapper文件的位置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.mxxd.SCM.Dao.UserMapper" > <resultMap id="userMap" type="com.mxxd.SCM.Entity.UserEntity" > <id column="user_id" property="id" /> <result column="user_username" property="username" /> <result column="user_password" property="password" /> <result column="user_name" property="name" /> <result column="user_phone" property="phone" /> <result column="user_email" property="email" /> <result column="user_address" property="address" /> <result column="user_authority" property="authority" /> <result column="is_login" property="is_login" /> </resultMap> <select id="login" parameterType="String" resultMap="userMap"> select * from users where user_username = #{0} and user_password = #{1} </select> <select id="queryUser" resultMap="userMap"> select * from users where 1=1 <if test="id !=0"> and user_id = #{id} </if> <if test="username !=null and username !='' "> and user_username = #{username} </if> <if test="password !=null and password !='' "> and user_password = #{password} </if> <if test="name !=null and name !='' "> and user_name like "%" #{name}"%" </if> </select> <insert id="insert" parameterType="com.mxxd.SCM.Entity.UserEntity" > INSERT INTO users (user_username,user_password,user_name,user_phone,user_email,user_address,user_authority,is_login) VALUES (#{username}, #{password}, #{name},#{phone},#{email},#{address},#{authority},#{is_login}) </insert> <update id="update" parameterType="com.mxxd.SCM.Entity.UserEntity" > UPDATE users SET <if test="username != null and username != ''">user_username = #{username},</if> <if test="password != null and password != ''">user_password = #{password},</if> <if test="name != null and name != ''">user_name = #{name},</if> <if test="phone != null and phone != ''">user_phone = #{phone},</if> <if test="email != null and email != ''">user_email = #{email},</if> <if test="address != null and address != ''">user_address = #{address},</if> <if test="authority != null and authority != ''">user_authority = #{authority},</if> WHERE user_id = #{id} </update> <delete id="delete" parameterType="Integer" > DELETE FROM users WHERE user_id =#{0} </delete> </mapper>
Service层只需要一个service类即可 不需要一个接口一个实现类 添加注解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 @Service @Autowired 是指自动生成get和set方法 @Service public class UserService { @Autowired private UserMapper userMapper; public UserEntity login(String username, String password){ UserEntity user = userMapper.login(username,password); return user; } }
启动类添加注解 @MapperScan(“com.mxxd.SCM.Dao”)自动扫描Dao层mapper
1 2 3 4 5 6 7 8 @SpringBootApplication @MapperScan("com.mxxd.SCM.Dao") public class ScmApplication { public static void main(String[] args) { SpringApplication.run(ScmApplication.class, args); } }
2.前端不推荐jsp,推荐thymeleaf或freemarker 使用freemarker pom.xml文件添加依赖
1 2 3 4 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
前端使用 .ftl 文件 在resources文件夹下创建两个目录:static 和 template static:目录下创建css、js、img三个目录,存放静态资源文件 template:目录下存放 XX.ftl 文件 在com.mxxd.SCM目录下创建一个Conf目录,配置springboot的静态资源文件目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 @Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); } @Bean public HttpMessageConverter<String> responseBodyConverter() { StringHttpMessageConverter converter = new StringHttpMessageConverter( Charset.forName("UTF-8")); return converter; } @Override public void configureMessageConverters( List<HttpMessageConverter<?>> converters) { super.configureMessageConverters(converters); converters.add(responseBodyConverter()); } @Override public void configureContentNegotiation( ContentNegotiationConfigurer configurer) { configurer.favorPathExtension(false); } }
在 ftl 文件中如下引用
如果要引用其他页面,使用 <#include />
1 <#include "header.ftl" encoding="UTF-8"/>
3.启动项目必须启动XXXApplication启动类 不能进行单元测试!!! 因为需要等SpringBoot把所有的配置全部编译完成之后才能运行,不然会找不到BeanFactory
4.测试controller层调用service调用mapper连接数据库返回值是否正确 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 @Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; /* * 启动之后访问 /user/test 会自动跳转到index.ftl * 如果直接访问index.ftl是无法访问成功的 * 因为ftl文件是一个模板文件,需要经过后台跳转才能进行渲染成网页 */ @RequestMapping("/test") public String home(){ return "index"; } @RequestMapping("/home") public ModelAndView login() { UserEntity userEntity = userService.login("admin", "admin"); ModelAndView mv = new ModelAndView(); if (userEntity == null) { mv.addObject("message", "用户名或密码错误,请重新输入!"); mv.setViewName("index"); } else { mv.addObject("user", userEntity); mv.setViewName("index"); } System.out.println(userEntity); System.out.println(mv.getModel()); System.out.println(mv.getViewName()); return mv; } }
直接在页面上进行测试,@Test 使用会报空指针错误 添加 @ResponseBody 注解不用返回页面,直接打印输出结果 前端直接使用 ${user.name} 获取user里name属性值 ${user}获取user整个对象值