打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Spring Boot实践应用开发(4)

分类: JAVA ECLIPSE J2EE SPRING ORACLE 2015-05-09 19:56 467人阅读 评论(1) 收藏 举报

【使用MyBatis连接ORACL数据库】

前期准备,参考Spring Boot实践应用开发(3),建立名为sample的项目

1,在src/main下创建resources文件夹,在buildpath里设置为source,输出文件夹默认bin。

 

2,在resources文件夹下创建文件application.yml,输入数据连接信息。(数据库连接信息及用户名密码按各自实际环境设置)

  1. # DB Connection Setting  
  2. spring.datasource.url: jdbc:oracle:thin:@localhost:1521:orcl  
  3. spring.datasource.username: sample  
  4. spring.datasource.password: sample  
  5. spring.datasource.driver-class-name: oracle.jdbc.OracleDriver  

3,在resources目录下创建文件夹lib,把oracle连接驱动ojdbc6.jar拷贝到lib文件夹下。

 

4,修改build.gradle文件,追加mybatis库,数据连接相关库,以及日志输出相关库。

  1. buildscript {  
  2.    repositories {  
  3.         jcenter()  
  4.        mavenLocal()  
  5.        mavenCentral()         
  6.         maven { url"http://repo.spring.io/snapshot" }  
  7.         maven { url"http://repo.spring.io/milestone" }  
  8.         maven { url"https://repo.spring.io/libs-release" }  
  9.         maven { url"https://repo.spring.io/plugins-snapshot" }  
  10.     }  
  11.    dependencies {  
  12.         classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.3.RELEASE")  
  13.     }  
  14. }  
  15.    
  16. apply plugin:'java'  
  17. apply plugin:'eclipse'  
  18. apply plugin:'spring-boot'  
  19.    
  20. jar {  
  21.     baseName= 'sample'  
  22.     version=  '0.1.0'  
  23. }  
  24.    
  25. repositories {  
  26.     jcenter()  
  27.    mavenLocal()  
  28.    mavenCentral()  
  29.     maven { url"http://repo.spring.io/snapshot" }  
  30.     maven { url"http://repo.spring.io/milestone" }  
  31.     maven { url"https://repo.spring.io/libs-release" }  
  32.     maven { url"https://repo.spring.io/plugins-snapshot" }  
  33. }  
  34.    
  35. sourceCompatibility = 1.8  
  36. targetCompatibility = 1.8  
  37.    
  38. dependencies {     
  39.    compile("org.springframework.boot:spring-boot-starter-web")  
  40.    compile("org.springframework.boot:spring-boot-starter-data-jpa")// added for DB connection on 20150509  
  41.     compile("org.springframework.boot:spring-boot-starter-jdbc") // added for DB connection on20150509  
  42.    compile(files("./src/main/resources/lib/ojdbc6.jar")) // added for DBconnection on 20150509  
  43.    compile("com.h2database:h2") // added for DB connection on 20150509  
  44.    compile("org.mybatis:mybatis:3.2.8") // added for mybatis on 20150509  
  45.    compile("org.mybatis:mybatis-spring:1.2.2") // added for mybatis on 20150509  
  46.    compile("org.lazyluke:log4jdbc-remix:0.2.7")// added for slf4j on 20150509  
  47.    compile("org.projectlombok:lombok:1.16.2") // added for lombok on 20150509  
  48.    testCompile("org.springframework.boot:spring-boot-starter-test")  
  49. }  
  50.    
  51. task wrapper(type: Wrapper) {  
  52.    gradleVersion = '2.3'  
  53. }  

6, 在resources文件夹下创建文件logback.xml,设定日志输出信息。
  1. <?xml version="1.0"encoding="UTF-8"?>  
  2. <configuration scan="true"scanPeriod="30 seconds">  
  3.        <include resource="org/springframework/boot/logging/logback/base.xml"/>  
  4.        <logger name="jdbc"level="off" />  
  5.        <logger name="jdbc.sqltiming"level="info" />  
  6. </configuration>  

7,在数据库端执行初始化SQL语句。
  1. CREATE TABLE users (username VARCHAR(100) NOT NULL PRIMARY KEYpassword VARCHAR(100), role VARCHAR(100));  
  2. INSERT INTO users (username,password, role) VALUES ('User''demo''User');  
  3. INSERT INTO users (username,password, role) VALUES ('Admin''demo''Admin');  
  4. commit;  

8,在resources文件夹下创建文件夹org\com\sample\mapper,然后新建UserMapper.xml,记入数据操作SQL语句。
  1. <?xmlversionxmlversion="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE mapper  
  3. PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  4.    
  5. <mappernamespacemappernamespace="org.com.sample.mapper.UserMapper">  
  6.    
  7.                 <select id="selectAllUser"resultType="org.com.sample.dataset.User">  
  8.                                 SELECT username, password, role FROM  
  9.                                 users  
  10.                 </select>  
  11.    
  12.                 <select id="selectUserByUsername"useCache="false"  
  13.                                 parameterType="String"resultType="org.com.sample.dataset.User">  
  14.                                 SELECT username, password, role FROM  
  15.                                 users  
  16.                                 WHERE username=#{username}  
  17.                 </select>  
  18.    
  19.                 <insert id="insertUser"parameterType="org.com.sample.dataset.User">  
  20.                                 INSERT INTO users  
  21.                                 (  
  22.                                 username,  
  23.                                 password,  
  24.                                 role  
  25.                                 )  
  26.                                 VALUES  
  27.                                 (  
  28.                                 #{username},  
  29.                                 #{password},  
  30.                                 #{role}  
  31.                                 <!-- if we want to handle nulldata, we can set "jdbcType", below is sample.  
  32.                                 #{username ,jdbcType=VARCHAR},  
  33.                                 #{password ,jdbcType=VARCHAR},  
  34.                                 #{role ,jdbcType=VARCHAR} -->  
  35.                                 )  
  36.                 </insert>  
  37.    
  38.                 <update id="updateUserByUsername"parameterType="org.com.sample.dataset.User">  
  39.                                 UPDATE users  
  40.                                 <set>  
  41.                                                 <iftestiftest="password != null">password=#{password}</if>  
  42.                                                 <iftestiftest="role != null">role=#{role}</if>  
  43.                                 </set>  
  44.                                 WHERE username=#{username}  
  45.                 </update>  
  46.    
  47.                 <delete id="deleteUserByUsername"parameterType="String">  
  48.                                 DELETE FROM  
  49.                                 users  
  50.                                 WHERE username=#{username}  
  51.                 </delete>  
  52.    
  53. </mapper>  

9,按下面层次新建包及JAVA类。

 

 Application.java

  1. package org.com.sample;  
  2.    
  3. importorg.springframework.boot.*;  
  4. importorg.springframework.boot.autoconfigure.*;  
  5.    
  6. @SpringBootApplication  
  7. public class Application {  
  8.    
  9.        public static void main(String[] args) throws Exception {  
  10.               SpringApplicationapp = new SpringApplication(Application.class);  
  11.               app.setShowBanner(false); // turn off thebanner  
  12.               app.run(args);  
  13.        }  
  14. }  

ApplicationConfig.java

  1. package org.com.sample;  
  2.    
  3. import java.io.File;  
  4. importjavax.servlet.Filter;  
  5. importjavax.sql.DataSource;  
  6. importnet.sf.log4jdbc.Log4jdbcProxyDataSource;  
  7. importorg.apache.ibatis.session.SqlSessionFactory;  
  8. importorg.com.sample.mapper.UserMapper;  
  9. importorg.mybatis.spring.SqlSessionFactoryBean;  
  10. importorg.mybatis.spring.SqlSessionTemplate;  
  11. importorg.springframework.beans.factory.annotation.Autowired;  
  12. importorg.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;  
  13. importorg.springframework.boot.autoconfigure.jdbc.DataSourceProperties;  
  14. importorg.springframework.context.annotation.Bean;  
  15. importorg.springframework.context.annotation.Configuration;  
  16. importorg.springframework.core.Ordered;  
  17. importorg.springframework.core.annotation.Order;  
  18. import org.springframework.core.io.ClassPathResource;  
  19. importorg.springframework.core.io.Resource;  
  20. importorg.springframework.web.filter.CharacterEncodingFilter;  
  21.    
  22. @Configuration  
  23. public class ApplicationConfig {  
  24.    
  25.        @Autowired  
  26.        DataSourcePropertiesdataSourceProperties;  
  27.        DataSourcedataSource;  
  28.    
  29.        @Bean  
  30.        DataSourcerealDataSource() {  
  31.               DataSourceBuilderfactory = DataSourceBuilder  
  32.                            .create(this.dataSourceProperties.getClassLoader())  
  33.                            .url(this.dataSourceProperties.getUrl())  
  34.                            .username(this.dataSourceProperties.getUsername())  
  35.                            .password(this.dataSourceProperties.getPassword());  
  36.               this.dataSource = factory.build();  
  37.               return newLog4jdbcProxyDataSource(this.dataSource);  
  38.        }  
  39.    
  40.        @Bean  
  41.        public SqlSessionFactorygetSqlSessionFactory() {  
  42.               Resource[]resources = new Resource[] { getMapperXMLPathResource(UserMapper.class)  
  43.    
  44.               };  
  45.    
  46.               SqlSessionFactoryBeanfactoryBean = newSqlSessionFactoryBean();  
  47.               factoryBean.setDataSource(realDataSource());  
  48.               factoryBean.setMapperLocations(resources);  
  49.    
  50.               SqlSessionFactorysqlSessionFactory = null;  
  51.               try {  
  52.                      sqlSessionFactory = factoryBean.getObject();  
  53.               }catch (Exception e) {  
  54.                      e.printStackTrace();  
  55.                      System.exit(0);  
  56.               }  
  57.               org.apache.ibatis.session.Configurationconfiguration = sqlSessionFactory  
  58.                            .getConfiguration();  
  59.               configuration.setMapUnderscoreToCamelCase(true);  
  60.    
  61.               return sqlSessionFactory;  
  62.        }  
  63.    
  64.        public static ResourcegetMapperXMLPathResource(Class<?> clazz) {  
  65.               return new ClassPathResource(clazz.getName()  
  66.                            .replace(".", File.separator).concat(".xml"));  
  67.        }  
  68.    
  69.        @Bean  
  70.        public UserMappergetUserMapper() {  
  71.               SqlSessionTemplatesessionTemplate = new SqlSessionTemplate(  
  72.                            getSqlSessionFactory());  
  73.               return sessionTemplate.getMapper(UserMapper.class);  
  74.        }  
  75.    
  76.        @Order(Ordered.HIGHEST_PRECEDENCE)  
  77.        @Bean  
  78.        FiltercharacterEncodingFilter() {  
  79.               CharacterEncodingFilterfilter = newCharacterEncodingFilter();  
  80.               filter.setEncoding("UTF-8");  
  81.               filter.setForceEncoding(true);  
  82.               return filter;  
  83.        }  
  84. }  

UserController.java
  1. packageorg.com.sample.controller;  
  2.    
  3. import java.net.URI;  
  4. import java.util.List;  
  5. importorg.com.sample.dataset.User;  
  6. importorg.com.sample.facade.UserFacade;  
  7. import org.slf4j.Logger;  
  8. importorg.slf4j.LoggerFactory;  
  9. importorg.springframework.beans.factory.annotation.Autowired;  
  10. importorg.springframework.http.HttpHeaders;  
  11. importorg.springframework.http.HttpStatus;  
  12. importorg.springframework.http.ResponseEntity;  
  13. importorg.springframework.web.bind.annotation.PathVariable;  
  14. importorg.springframework.web.bind.annotation.RequestBody;  
  15. importorg.springframework.web.bind.annotation.RequestMapping;  
  16. importorg.springframework.web.bind.annotation.RequestMethod;  
  17. importorg.springframework.web.bind.annotation.RestController;  
  18. importorg.springframework.web.util.UriComponentsBuilder;  
  19.    
  20. @RestController  
  21. @RequestMapping("user")  
  22. public class UserController {  
  23.    
  24.        private static final Logger logger = LoggerFactory  
  25.                      .getLogger(UserController.class);  
  26.    
  27.        @Autowired  
  28.        UserFacadeuserFacade;  
  29.    
  30.        @RequestMapping(method =RequestMethod.GET)  
  31.        List<User>selectAllUser() {  
  32.    
  33.               List<User>userList = userFacade.selectAllUser();  
  34.               return userList;  
  35.        }  
  36.    
  37.        @RequestMapping(value = "{username}", method =RequestMethod.GET)  
  38.        UserselectUser(@PathVariable String username) {  
  39.    
  40.               Useruser = userFacade.selectUserByUsername(username);  
  41.               logger.info("###incontroller user=[" + user.toString() + "]###");  
  42.               return user;  
  43.        }  
  44.    
  45.        @RequestMapping(method =RequestMethod.POST)  
  46.        ResponseEntity<User>insertUser(@RequestBody User user,  
  47.                      UriComponentsBuilderuriBuilder) {  
  48.    
  49.               userFacade.insertUser(user);  
  50.               UserinsertedUser = userFacade.selectUserByUsername(user.getUsername());  
  51.               URIlocation = uriBuilder.path("user/{username}")  
  52.                            .buildAndExpand(insertedUser.getUsername()).toUri();  
  53.               HttpHeadersheaders = new HttpHeaders();  
  54.               headers.setLocation(location);  
  55.               return newResponseEntity<>(insertedUser, headers, HttpStatus.CREATED);  
  56.        }  
  57.    
  58.        @RequestMapping(value = "{username}", method =RequestMethod.PUT)  
  59.        UserupdateUser(@PathVariable String username, @RequestBody User user) {  
  60.    
  61.               user.setUsername(username);  
  62.               userFacade.updateUserByUsername(user);  
  63.               return userFacade.selectUserByUsername(username);  
  64.        }  
  65.    
  66.        @RequestMapping(value = "{username}", method =RequestMethod.DELETE)  
  67.        void updateUser(@PathVariable String username) {  
  68.    
  69.               userFacade.deleteUserByUsername(username);  
  70.        }  
  71.    
  72. }  

User.java
  1. packageorg.com.sample.dataset;  
  2.    
  3. importjavax.persistence.Entity;  
  4. importjavax.persistence.Id;  
  5. importjavax.persistence.Table;  
  6. importlombok.AllArgsConstructor;  
  7. import lombok.Data;  
  8. importlombok.NoArgsConstructor;  
  9. import com.fasterxml.jackson.annotation.JsonIgnore;  
  10.    
  11. @Data  
  12. @NoArgsConstructor  
  13. @AllArgsConstructor  
  14. @Entity  
  15. @Table(name = "users")  
  16. public class User {  
  17.        @Id  
  18.        private String username;  
  19.        // Comment:if set@JsonIgnore, We can't use curl to send and get data  
  20.        // @JsonIgnore  
  21.        private String password;  
  22.        // @JsonIgnore  
  23.        private String role;  
  24. }  

UserFacade.java
  1. packageorg.com.sample.facade;  
  2.    
  3. import java.util.List;  
  4.    
  5. importorg.com.sample.dataset.User;  
  6.    
  7. public interface UserFacade {  
  8.    
  9.        public List<User> selectAllUser();  
  10.    
  11.        public User selectUserByUsername(String username);  
  12.    
  13.        public int insertUser(Useruser);  
  14.    
  15.        public int updateUserByUsername(User user);  
  16.    
  17.        public int deleteUserByUsername(String username);  
  18.    
  19. }  


UserFacadeImpl.java

  1. packageorg.com.sample.facade;  
  2.    
  3. import java.util.List;  
  4.    
  5. importorg.com.sample.dataset.User;  
  6. importorg.com.sample.service.UserService;  
  7. importorg.springframework.beans.factory.annotation.Autowired;  
  8. importorg.springframework.stereotype.Service;  
  9. importorg.springframework.transaction.annotation.Transactional;  
  10.    
  11. @Service  
  12. @Transactional  
  13. public class UserFacadeImpl implements UserFacade {  
  14.    
  15.        @Autowired  
  16.        UserServiceuserService;  
  17.    
  18.        @Override  
  19.        public List<User>selectAllUser() {  
  20.               return userService.selectAllUser();  
  21.        }  
  22.    
  23.        @Override  
  24.        public UserselectUserByUsername(String username) {  
  25.               return userService.selectUserByUsername(username);  
  26.        }  
  27.    
  28.        @Override  
  29.        public int insertUser(User user) {  
  30.               return userService.insertUser(user);  
  31.        }  
  32.    
  33.        @Override  
  34.        public intupdateUserByUsername(User user) {  
  35.               return userService.updateUserByUsername(user);  
  36.        }  
  37.    
  38.        @Override  
  39.        public intdeleteUserByUsername(String username) {  
  40.               return userService.deleteUserByUsername(username);  
  41.        }  
  42.    
  43. }  

UserMapper.java
  1. packageorg.com.sample.mapper;  
  2.    
  3. import java.util.List;  
  4.    
  5. importorg.com.sample.dataset.User;  
  6.    
  7. public interface UserMapper {  
  8.    
  9.        public List<User> selectAllUser();  
  10.    
  11.        public User selectUserByUsername(String username);  
  12.    
  13.        public int insertUser(Useruser);  
  14.    
  15.        public int updateUserByUsername(User user);  
  16.    
  17.        public int deleteUserByUsername(Stringusername);  
  18.    
  19. }  


UserService.java

  1. packageorg.com.sample.service;  
  2.    
  3. import java.util.List;  
  4.    
  5. importorg.com.sample.dataset.User;  
  6. importorg.com.sample.mapper.UserMapper;  
  7. import org.slf4j.Logger;  
  8. importorg.slf4j.LoggerFactory;  
  9. importorg.springframework.beans.factory.annotation.Autowired;  
  10. importorg.springframework.stereotype.Service;  
  11.    
  12. @Service  
  13. public class UserService {  
  14.    
  15.        private static final Logger logger = LoggerFactory  
  16.                      .getLogger(UserService.class);  
  17.    
  18.        @Autowired  
  19.        UserMapperuserMapper;  
  20.    
  21.        public List<User>selectAllUser() {  
  22.               List<User>userList = userMapper.selectAllUser();  
  23.               return userList;  
  24.        }  
  25.    
  26.        public UserselectUserByUsername(String username) {  
  27.               Useruser = userMapper.selectUserByUsername(username);  
  28.               logger.info("###in serviceuser=[" + user.toString() + "]###");  
  29.               return user;  
  30.        }  
  31.    
  32.        public int insertUser(User user) {  
  33.               return userMapper.insertUser(user);  
  34.        }  
  35.    
  36.        public intupdateUserByUsername(User user) {  
  37.               return userMapper.updateUserByUsername(user);  
  38.        }  
  39.    
  40.        public intdeleteUserByUsername(String username) {  
  41.               return userMapper.deleteUserByUsername(username);  
  42.        }  
  43. }  

10,执行 gradlew eclipse 命令

 

 11,执行 gradlew build 命令

 

12,执行 gradlew bootRun 命令


13,用curl进行检证

取全件,curl http://localhost:8080/user -v -X GET

 

取username是Admin的1件,curlhttp://localhost:8080/user/Admin -v -X GET

 

插入1件username是User1的数据,

curl http://localhost:8080/user -v -X POST -H"Content-Type: application/json"-d "{\"username\":\"User1\",\"password\":\"demo\" ,\"role\":\"User\"}"

 

把username是User1的role更新为Admin,

curl http://localhost:8080/user/User1 -v -X PUT -H"Content-Type: application/json"-d "{\"role\" : \"Admin\"}"

删除username是User1的数据,

curl http://localhost:8080/user/User1 -v -X DELETE


源代码已上传到百度云盘,http://pan.baidu.com/s/1o6spOJS,second.zip



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Spring Boot 快速整合MyBatis (附上源码)
基于Spring Mybatis jsp servlet的用户登录注册功能(数据库查找和插入用户),jsp写的前端(css javascript),使用IDEA
最简单的SpringBoot整合MyBatis教程
MyBatis Spring整合示例
MyBatis学习
Mybatis缓存介绍
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服