上一篇文章开始了咱们的springboot序篇,咱们配置了mysql数据库,可是咱们sql语句直接写在controller中而且使用的是jdbcTemplate。项目中确定不会这样使用,上篇文章也说了,会结合mybatis 或者JPA 使用。咱们这篇文章就来结合 mybatis 来使用吧,至于为何选mybatis 而不是JPA ,这个看我的洗好吧。而后这篇文章会附带一讲一下今天为项目新增的配置。主要是为了保持项目和文章的一致性。java
先贴出咱们今天项目的结构吧,和昨天贴出来的差很少,在那基础上添加了一些东西,整个框架的模型算是成型了。
mysql
通常改动都是从pom.xml 开始的,咱们在昨天基础上的pom.xml 文件中加上mybatis 依赖,版本本身选吧。linux
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency>
昨天咱们建立了一个user表 并插入了一条数据,咱们就先用这张表吧,因此咱们在entry 包中建立一个UserEntry 的实体类.
代码以下:git
@Getter @Setter public class UserEntry { private int id; private String userName; private String password; private String email; private String roleCode; private String roleName; private String gmtCreate; private String gmtUpdate; private String nickname; private String userCreate; }
能够看到这里用的注解和@Getter 和@Setter。这里就是避免代码中写入过多的get和 set 方法,使得代码变得更加简洁。程序员
Dao是用来处理数据的,这里咱们引入了mybatis ,能够使用注解,也能够建立xml 文件,将sql 语句写在xml 文件中。咱们这里就采用注解的方式吧,毕竟咱们springboot项目,不想再出现xml配置文件了(后期也说不定哈哈)。github
在dao包下建立一个userMapper 接口。代码以下:web
@Mapper public interface UserMapper { @Select("select id,username as userName,password,email,role_code as roleCode,gmt_create as gmtCreate,gmt_update as gmtUpdate,nickname as nickName,user_create as userCreate from sys_user") List<UserEntry> findUserList(); @Insert({"insert into sys_user(username,password,email) values('${user.userName}','${user.password}','${user.email}')"}) int add(@Param("user") UserEntry user); @Delete("delete from sys_user where id = #{id}") int delete(int id); }
咱们这里就先写一个查询、删除和插入的方法吧。能够看到,在接口上引入@Mapper 注解,而后就能够直接使用@Select 和@Insert 等注解啦,直接把注解sql 语句写在这里面就能够了。spring
service层咱们通常都以一个接口和一个实现接口的具体类。sql
代码以下:数据库
public interface UserService { List<UserEntry> findUserList(); int addUser(String userName,String password,String email); int deleteUser(int id); }
在service 包的impl 包建立 UserServiceImpl 类。代码以下:
@Service public class UserServiceImpl implements UserService { @Autowired protected UserMapper userMapper; @Override public List<UserEntry> findUserList() { return userMapper.findUserList(); } @Override public int addUser(String userName, String password, String email) { UserEntry user=new UserEntry(); user.setUserName(userName); user.setPassword(password); user.setEmail(email); return userMapper.add(user); } @Override public int deleteUser(int id) { return userMapper.delete(id); } }
咱们在controller 包下的userinfo 包下建立UserController 类。代码以下:
@Slf4j @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping(value = "/list",method = RequestMethod.GET) public List<UserEntry> findUserList(){ return userService.findUserList(); } @RequestMapping(value = "/add",method = RequestMethod.GET) public String addUser(@RequestParam(value = "userName")String uaserName,@RequestParam(value = "password")String password,@RequestParam(value = "email")String email){ int falg=userService.addUser(uaserName,password,email); if(falg>0){ return "success"; } return "error"; } @RequestMapping(value = "/delete",method = RequestMethod.GET) public String deleteUser(@RequestParam(value = "id")int id){ if(userService.deleteUser(id)>0){ return "success"; } return "error"; } }
好了,万事具有,来测试吧。咱们启动项目后,在浏览器输入
添加一个用户 http://localhost:9090/zlflovemm/user/add?userName=qaz&password=123456&email=123@qq.com
查询全部用户 http://localhost:9090/zlflovemm/user/list
删除一个用户 http://localhost:9090/zlflovemm/user/delete?id=19
都没有问题啦,说明基本的增删改查整合 mybatis 都是可行的。
好了,大头讲完了,咱们如今来说讲项目今天进行了哪些配置。首先咱们来看下咱们项目中多了好几个配置文件。
分别对应的是开发环境,测试环境,生产环境。毕竟咱们在实际开发过程当中,这三个环境都是常常有用到的,总会有数据库链接改来改去的问题。这里直接配置多份,想用哪一个用那个就能够了。避免反复改容易出错的问题。
我这里就暂时把链接mysql 的连接放到不一样环境了。
先在application.properties中加入
spring.profiles.active=dev 表示用的是开发环境,就会读取application-dev.yml 文件中的配置。
application-dev.xml文件内容以下,另外两个文件也差很少,就不贴出来了。
项目中怎么能缺少日志文件呢,我这里用的springboot 自带的日志框架logback 也很方便。咱们先在application.properties 中加入
#日志配置 logging.level.org.springframework.web=info logging.config=classpath:logback.xml debug=true
而后在 application.properties 同目录下建立一个 logback.xml.内容以下:
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> <property name="LOG_HOME" value="./logs" /> <property name="INFO_FILE" value="zlflovemm_log" /> <property name="ERROR_FILE" value="zlflovemm_error" /> <!--控制台日志, 控制台输出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> </appender> <!-- 文件保存日志的相关配置,同步 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <Prudent>true</Prudent> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <FileNamePattern> ${LOG_HOME}/${INFO_FILE}-%d{yyyy-MM-dd}.log </FileNamePattern> <!--日志文件保留天数--> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%t][%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> <!--日志文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!-- 文件保存日志的相关配置,同步 --> <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <Prudent>true</Prudent> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <FileNamePattern> ${LOG_HOME}/${ERROR_FILE}-%d{yyyy-MM-dd}.log </FileNamePattern> <!--日志文件保留天数--> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%t][%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> <!--日志文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!-- 日志输出级别 --> <root level="INFO"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE"/> <appender-ref ref="ERROR" level="error" /> </root> </configuration>
这样项目日志就配置好了,至于日志的具体配置,修改logback.xml 里面参数就能够了。和log4g差很少。
最后既然是一个项目,固然得有点标志性的东西,好比logo。springboot 给咱们留下了一个彩蛋就是banner。咱们能够在项目启动的时候,显示咱们独一无二的logo .
在application.properties 同目录下建立 banner.txt
艺术字你们在网上自行搜索,这里就不推荐啦哈哈。这样咱们在项目启动的时候就会加载咱们的logo. 算是给广大的咱们一点福利吧。
今晚总算是写完了,原本会早点的,可是不知道怎么就弄这么晚了。
今天项目的代码也同步到github 上啦。
github地址:https://github.com/QuellanAn/zlflovemm
后续加油♡
欢迎你们关注我的公众号 "程序员爱酸奶"
分享各类学习资料,包含java,linux,大数据等。资料包含视频文档以及源码,同时分享本人及投递的优质技术博文。
若是你们喜欢记得关注和分享哟❤