Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 7 additions & 62 deletions spring-boot-13-MyBatis/README.md
Original file line number Diff line number Diff line change
@@ -1,77 +1,22 @@
----
## [spring-boot-3-logs-Logback 集成Logback日志框架](https://github.com/timebusker/spring-boot/tree/master/spring-boot-3-logs/spring-boot-3-logs-Logback/)
## [集成MyBatis持久层框架](https://github.com/timebusker/spring-boot/tree/master/spring-boot-13-MyBatis/)

### 项目阐述
### 关于MyBatis
![image](https://github.com/timebusker/spring-boot/raw/master/static/spring-boot-3-logs/spring-boot-3-logs-Logback/Logback.png?raw=true)

+ #### SLF4J+Logback配置说明
* [logback日志分开纪录](http://www.cnblogs.com/DeepLearing/p/5664941.html)</br>
* [logback日志分开纪录](http://www.cnblogs.com/DeepLearing/p/5664941.html)
* [logback节点配置详解](http://www.cnblogs.com/DeepLearing/p/5663178.html)
* [logback 中文手册.pdf](https://github.com/timebusker/spring-boot/raw/master/static/spring-boot-3-logs/spring-boot-3-logs-Logback/logback_cn.pdf?raw=true)

+ #### 配置多环境不同日志级别
***logback.xml*配置讲解**
```xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 文件输出格式 -->
<property name="PATTERN" value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) |-%-5level [%thread] %c [%L] -| %msg%n" />
<!-- test文件路径 -->
<property name="TEST_FILE_PATH" value="c:/logs/test.log" />
<!-- pro文件路径 -->
<property name="PRO_FILE_PATH" value="c:/logs/prod.log" />

<!-- 开发环境 -->
<springProfile name="dev">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date [%thread] %-5level %logger{80} || %msg%n</pattern>
</encoder>
</appender>
<logger name="cn.timebusker.util" level="debug" />
<root level="info">
<appender-ref ref="CONSOLE" />
</root>
</springProfile>
```

<!-- 测试环境 -->
<springProfile name="test">
<!-- 每天产生一个文件 -->
<appender name="TEST-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路径 -->
<file>${TEST_FILE_PATH}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名称 -->
<fileNamePattern>${TEST_FILE_PATH}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 文件最大保存历史数量 -->
<MaxHistory>100</MaxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${PATTERN}</pattern>
</layout>
</appender>
<root level="info">
<appender-ref ref="TEST-FILE" />
</root>
</springProfile>
### 相关文章

[MyBatis Generator 详解](http://blog.csdn.net/isea533/article/details/42102297)

<!-- 生产环境 -->
<springProfile name="prod">
<appender name="PROD_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${PRO_FILE_PATH}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${PRO_FILE_PATH}/warn.%d{yyyy-MM-dd}.log</fileNamePattern>
<MaxHistory>100</MaxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${PATTERN}</pattern>
</layout>
</appender>
<root level="warn">
<appender-ref ref="PROD_FILE" />
</root>
</springProfile>
</configuration>
```

----
25 changes: 22 additions & 3 deletions spring-boot-13-MyBatis/pom.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.timebusker</groupId>
Expand All @@ -13,7 +14,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- Spring Boot 核心三个模块 START -->
<!-- Spring Boot 核心三个模块 START -->
<!-- 核心模块,包括自动配置支持、日志和YAML -->
<dependency>
<groupId>org.springframework.boot</groupId>
Expand Down Expand Up @@ -56,8 +57,21 @@
<optional>true</optional>
</dependency>

<!-- MyBatis -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>


<!-- 日志配置开始 -->
<!-- 加上几个重要的实现适配器log4j-over-slf4j、log4j-over-slf4j、jul-to-slf4j, 然后jboss-logging部分也进行了统一的版本控制。同时删除及exclude掉所有log4j、commons-logging的各个版本。 适配器和具体日志实现,不能共存,否则适配器不生效。这样的话,我们只有logback配置文件即可,因为log4j的输出已经委托给了slf4j(通过log4j-over-slf4j),而slf4j的默认实现是logbac -->
<!-- 加上几个重要的实现适配器log4j-over-slf4j、log4j-over-slf4j、jul-to-slf4j, 然后jboss-logging部分也进行了统一的版本控制。同时删除及exclude掉所有log4j、commons-logging的各个版本。
适配器和具体日志实现,不能共存,否则适配器不生效。这样的话,我们只有logback配置文件即可,因为log4j的输出已经委托给了slf4j(通过log4j-over-slf4j),而slf4j的默认实现是logbac -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
Expand Down Expand Up @@ -88,5 +102,10 @@
<artifactId>logback-core</artifactId>
</dependency>
<!-- 日志配置结束 -->

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
</dependencies>
</project>
3 changes: 2 additions & 1 deletion spring-boot-13-MyBatis/src/main/java/cn/timebusker/App.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public class App {
* @ComponentScan 告诉Spring寻找其他组件,配置,以及业务层类,最前面才能加载到所有的类。
*/

@SuppressWarnings("unused")
public static void main(String[] args) {
// devtools:是spring boot的一个热部署工具
//设置 spring.devtools.restart.enabled 属性为false,可以关闭该特性.
Expand All @@ -42,7 +43,7 @@ public static void main(String[] args) {
String[] beanNames = ctx.getBeanDefinitionNames();
Arrays.sort(beanNames);
for (String beanName : beanNames) {
System.out.println(beanName);
// System.out.println(beanName);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package cn.timebusker.dao;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import cn.timebusker.entity.UserInfo;

/**
* 基于注解实现持久化操作
*
*/
@Mapper
public interface UserInfoMapper {

@Select("SELECT * FROM user_info WHERE username = #{name}")
List<UserInfo> findByName(@Param("name") String name);

@Select("SELECT * FROM user_info WHERE id = #{id}")
List<UserInfo> findById(@Param("id") int id);

@Insert("INSERT INTO user_info(Id,username,password,usertype,enabled,realname,email,tel) VALUES(#{id}, #{username},#{password}, #{usertype},#{enabled}, #{realname},#{email}, #{tel})")
int insert(UserInfo ui);

@Select("SELECT * FROM user_info WHERE 1=1 ")
List<UserInfo> findAll();

@Update("UPDATE user_info SET password=#{password} WHERE username=#{username}")
void update(UserInfo ui);

@Delete("DELETE FROM user_info WHERE id =#{id}")
void delete(int id);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package cn.timebusker.entity;

import java.io.Serializable;

/**
* 用户信息
*/
public class UserInfo implements Serializable {

private static final long serialVersionUID = -3054513298829319801L;

private Integer id;

private String username;

private String password;

private String usertype;

private Integer enabled;

private String realname;

private String qq;

private String email;

private String tel;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getUsertype() {
return usertype;
}

public void setUsertype(String usertype) {
this.usertype = usertype;
}

public Integer getEnabled() {
return enabled;
}

public void setEnabled(Integer enabled) {
this.enabled = enabled;
}

public String getRealname() {
return realname;
}

public void setRealname(String realname) {
this.realname = realname;
}

public String getQq() {
return qq;
}

public void setQq(String qq) {
this.qq = qq;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public String getTel() {
return tel;
}

public void setTel(String tel) {
this.tel = tel;
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
# 项目contextPath,一般在正式发布版本中,我们不配置
server.context-path=/logback
server.context-path=/mybatis
# 错误页,指定发生错误时,跳转的URL。请查看BasicErrorController源码便知
server.error.path=/error
# 服务端口
server.port=80
# session最大超时时间(分钟),默认为30
server.session-timeout=60
# 该服务绑定IP地址,启动服务器时如本机不是该IP地址则抛出异常启动失败,只有特殊需求的情况下才配置
# server.address=192.168.16.11
# server.address=192.168.16.11


# 数据连接配置
spring.datasource.url=jdbc:mysql://localhost:3306/timebusker-spring
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package test.dao;

import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.test.context.junit4.SpringRunner;

import cn.timebusker.App;
import cn.timebusker.dao.UserInfoMapper;
import cn.timebusker.entity.UserInfo;

import com.alibaba.fastjson.JSON;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class, webEnvironment = WebEnvironment.RANDOM_PORT)
public class UserInfoMapperTest {

@Autowired
UserInfoMapper dao;

@Test
public void findAll() throws Exception {
List<UserInfo> lui = dao.findAll();
System.out.println("\n\n\n\n\n");
System.out.println("输出结果:" + JSON.toJSONString(lui.get(0)));
System.out.println("输出结果:" + JSON.toJSONString(lui));
System.out.println("\n\n\n\n\n");
}

@Test
public void findByName() throws Exception {
List<UserInfo> lui = dao.findByName("test2");
System.out.println("\n\n\n\n\n");
System.out.println("输出结果:" + lui.get(0).getPassword());
System.out.println("\n\n\n\n\n");
}

@Test
public void insert() throws Exception {
UserInfo ui = new UserInfo();
ui.setId(1);
ui.setUsername("余姣姣");
System.out.println("\n\n\n\n\n");
System.out.println("输出结果:" + dao.insert(ui));
System.out.println("\n\n\n\n\n");
}

@Test
public void update() throws Exception {
List<UserInfo> lui = dao.findById(2);
lui.get(0).setPassword("wewrewz");
dao.update(lui.get(0));
lui = dao.findById(2);
System.out.println("\n\n\n\n\n");
System.out.println("输出结果:" + JSON.toJSONString(lui));
System.out.println("\n\n\n\n\n");
}

@Test
public void delete() throws Exception {
dao.delete(1);
System.out.println("\n\n\n\n\n");
System.out.println("输出结果:" + JSON.toJSONString(dao.findById(1)));
System.out.println("\n\n\n\n\n");
}
}
Loading