Browse Source

integrate mybatis

zhangxin 7 years ago
parent
commit
a260ea711e
19 changed files with 151 additions and 122 deletions
  1. 6 1
      mooctest-user-server/pom.xml
  2. 2 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/Application.java
  3. 40 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/config/NullValueHandler.java
  4. 0 21
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/dao/UserDao.java
  5. 1 1
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/mapper/MedalDao.java
  6. 1 1
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/mapper/User2IntegralDao.java
  7. 1 1
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/mapper/User2MedalDao.java
  8. 1 2
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/mapper/UserIntegralDao.java
  9. 53 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/mapper/UserMapper.java
  10. 4 17
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/model/User.java
  11. 2 10
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/rpc/UserRPC.java
  12. 1 2
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/UserService.java
  13. 2 5
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/impl/IntegralServiceImpl.java
  14. 2 4
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/impl/MedalServiceImpl.java
  15. 19 39
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/impl/UserServiceImpl.java
  16. 1 2
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/UserLogic.java
  17. 5 12
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/impl/UserLogicImpl.java
  18. 8 0
      mooctest-user-server/src/main/resources/application.yaml
  19. 2 4
      mooctest-user-server/src/test/java/cn/iselab/mooctest/user/service/impl/IntegralServiceImplTest.java

+ 6 - 1
mooctest-user-server/pom.xml

@@ -24,7 +24,12 @@
         <dependency>
             <groupId>cn.iselab.mooctest</groupId>
             <artifactId>user-dubbo-api</artifactId>
-            <version>1.0.13</version>
+            <version>1.0.15</version>
+        </dependency>
+        <dependency>
+            <groupId>org.mybatis.spring.boot</groupId>
+            <artifactId>mybatis-spring-boot-starter</artifactId>
+            <version>1.1.1</version>
         </dependency>
         <dependency>
             <groupId>cn.iselab.mooctest</groupId>

+ 2 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/Application.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.user;
 
+import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -95,6 +96,7 @@ import org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfigurati
         WebSocketAutoConfiguration.class,
         XADataSourceAutoConfiguration.class,
 })
+@MapperScan("cn.iselab.mooctest.user.mapper")
 public class Application {
 
     public static void main(String[] args){

+ 40 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/config/NullValueHandler.java

@@ -0,0 +1,40 @@
+package cn.iselab.mooctest.user.config;
+
+import org.apache.ibatis.type.JdbcType;
+import org.apache.ibatis.type.TypeHandler;
+
+import java.sql.*;
+
+/**
+ * @author sean
+ * @date 2018-03-15.
+ */
+public class NullValueHandler implements TypeHandler<String> {
+
+    @Override
+    public String getResult(ResultSet rs, String columnName) throws SQLException {
+        return rs.getString(columnName);
+    }
+
+    @Override
+    public String getResult(ResultSet rs, int columnIndex) throws SQLException {
+        return rs.getString(columnIndex);
+    }
+
+    @Override
+    public void setParameter(PreparedStatement preparedStatement, int i, String s, JdbcType jdbcType) throws SQLException {
+        if (s == null &&
+                jdbcType == JdbcType.VARCHAR
+//                        || jdbcType == JdbcType.TIMESTAMP || jdbcType == JdbcType.BIGINT || jdbcType == JdbcType.TINYINT || jdbcType == JdbcType.INTEGER)
+                ) {
+            preparedStatement.setString(i, "");
+        } else {
+            preparedStatement.setString(i, s);
+        }
+    }
+
+    @Override
+    public String getResult(CallableStatement callableStatement, int i) throws SQLException {
+        return callableStatement.getString(i);
+    }
+}

+ 0 - 21
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/dao/UserDao.java

@@ -1,21 +0,0 @@
-package cn.iselab.mooctest.user.dao;
-
-import cn.iselab.mooctest.user.model.User;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.data.repository.CrudRepository;
-
-import javax.transaction.Transactional;
-
-/**
- * @author sean
- * @date 2018-03-04.
- */
-@Transactional
-public interface UserDao extends CrudRepository<User, Long>, JpaSpecificationExecutor<User> {
-
-    User findById(Long id);
-
-    User findByEmail(String email);
-
-    User findByMobile(String mobile);
-}

+ 1 - 1
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/dao/MedalDao.java → mooctest-user-server/src/main/java/cn/iselab/mooctest/user/mapper/MedalDao.java

@@ -1,4 +1,4 @@
-package cn.iselab.mooctest.user.dao;
+package cn.iselab.mooctest.user.mapper;
 
 import cn.iselab.mooctest.user.model.Medal;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

+ 1 - 1
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/dao/User2IntegralDao.java → mooctest-user-server/src/main/java/cn/iselab/mooctest/user/mapper/User2IntegralDao.java

@@ -1,4 +1,4 @@
-package cn.iselab.mooctest.user.dao;
+package cn.iselab.mooctest.user.mapper;
 
 import cn.iselab.mooctest.user.model.User2Integral;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

+ 1 - 1
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/dao/User2MedalDao.java → mooctest-user-server/src/main/java/cn/iselab/mooctest/user/mapper/User2MedalDao.java

@@ -1,4 +1,4 @@
-package cn.iselab.mooctest.user.dao;
+package cn.iselab.mooctest.user.mapper;
 
 import cn.iselab.mooctest.user.model.User2Medal;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

+ 1 - 2
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/dao/UserIntegralDao.java → mooctest-user-server/src/main/java/cn/iselab/mooctest/user/mapper/UserIntegralDao.java

@@ -1,7 +1,6 @@
-package cn.iselab.mooctest.user.dao;
+package cn.iselab.mooctest.user.mapper;
 
 import cn.iselab.mooctest.user.model.UserIntegral;
-import org.springframework.data.jpa.domain.Specifications;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.repository.CrudRepository;
 

+ 53 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/mapper/UserMapper.java

@@ -0,0 +1,53 @@
+package cn.iselab.mooctest.user.mapper;
+
+import cn.iselab.mooctest.user.model.User;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+import java.util.List;
+
+/**
+ * @author sean
+ * @date 2018-03-04.
+ */
+
+public interface UserMapper extends PagingAndSortingRepository<User, Long> {
+
+    @Select("SELECT * FROM user WHERE id = #{id}")
+    User findById(Long id);
+
+    @Select("SELECT * FROM user WHERE email = #{email}")
+    User findByEmail(String email);
+
+    @Select("SELECT * FROM user WHERE mobile = #{mobile}")
+    User findByMobile(String mobile);
+
+    @Insert("INSERT INTO user(name, password, email) VALUES(#{name}, #{password}, #{email})")
+    void insert(User user);
+
+    @Update("UPDATE user SET name=#{name} WHERE id=#{id}")
+    void updateName(User user);
+
+    @Update("UPDATE user SET school=#{school}, province=#{province}, city=#{city} WHERE id=#{id}")
+    void updateAddress(User user);
+
+    @Update("UPDATE user SET email=#{email} WHERE id=#{id}")
+    void updateEmail(User user);
+
+    @Update("UPDATE user SET mobile=#{mobile} WHERE id=#{id}")
+    void updateMobile(User user);
+
+    @Update("UPDATE user SET photo_url=#{photoUrl} WHERE id=#{id}")
+    void updatePhotoUrl(User user);
+
+    @Update("UPDATE user SET password=#{password} WHERE id=#{id}")
+    void updatePassword(User user);
+
+    @Update("UPDATE user SET availability=#{availability} WHERE id=#{id}")
+    void updateAvailability(User user);
+
+    @Select("SELECT * FROM user WHERE name LIKE concat('%',#{name},'%')")
+    List<User> findByFuzzyName(String name);
+}

+ 4 - 17
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/model/User.java

@@ -1,48 +1,36 @@
 package cn.iselab.mooctest.user.model;
 
-import javax.persistence.*;
+import java.io.Serializable;
 import java.sql.Timestamp;
 
 /**
  * @author sean
  * @date 2018-03-02.
  */
-@Entity
-@Table(name = "user")
-public class User {
+public class User implements Serializable{
+
+    private static final long serialVersionUID = 1L;
 
-    @Id
-    @GeneratedValue
     private Long id;
 
-    @Column(name = "name")
     private String name;
 
-    @Column(name = "email")
     private String email;
 
-    @Column(name = "mobile")
     private String mobile;
 
-    @Column(name = "password")
     private String password;
 
-    @Column(name = "school")
     private String school;
 
-    @Column(name = "create_time")
     private Timestamp createTime = new Timestamp(System.currentTimeMillis());
 
-    @Column(name = "photo_url")
     private String photoUrl;
 
-    @Column(name = "province")
     private String province;
 
-    @Column(name = "city")
     private String city;
 
-    @Column(name = "manual_check_valid")
     private Boolean manualCheckValid;
 
     /**
@@ -50,7 +38,6 @@ public class User {
      * 0  用户被禁用
      * 1  用户解除禁用 可以正常使用
      */
-    @Column(name = "availability")
     private Integer availability;
 
     public Long getId() {

+ 2 - 10
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/rpc/UserRPC.java

@@ -5,12 +5,9 @@ import cn.iselab.mooctest.rpc.user.data.UserDTO;
 import cn.iselab.mooctest.user.web.logic.UserLogic;
 import com.alibaba.dubbo.config.annotation.Service;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * @author sean
@@ -54,12 +51,7 @@ public class UserRPC implements UserService {
     }
 
     @Override
-    public List<UserDTO> findByCondition(Map<String , String> condition) {
-        return  userLogic.findByCondition(condition);
-    }
-
-    @Override
-    public Page<UserDTO> getUserPageByUserIds(List<Long> list, Pageable pageable) {
-        return null;
+    public List<UserDTO> getUserByFuzzyName(UserDTO userDTO) {
+        return userLogic.getUserByFuzzyName(userDTO);
     }
 }

+ 1 - 2
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/UserService.java

@@ -4,7 +4,6 @@ package cn.iselab.mooctest.user.service;
 import cn.iselab.mooctest.user.model.User;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * @author sean
@@ -22,6 +21,6 @@ public interface UserService {
 
     User update(User user);
 
-    List<User> findByCondition(Map<String,String> condition);
+    List<User> findByFuzzyName(String name);
 }
 

+ 2 - 5
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/impl/IntegralServiceImpl.java

@@ -1,14 +1,11 @@
 package cn.iselab.mooctest.user.service.impl;
 
-import cn.iselab.mooctest.user.dao.User2IntegralDao;
-import cn.iselab.mooctest.user.dao.UserIntegralDao;
+import cn.iselab.mooctest.user.mapper.User2IntegralDao;
+import cn.iselab.mooctest.user.mapper.UserIntegralDao;
 import cn.iselab.mooctest.user.model.User2Integral;
 import cn.iselab.mooctest.user.model.UserIntegral;
 import cn.iselab.mooctest.user.service.IntegralService;
-import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.data.jpa.domain.Specifications;
 import org.springframework.stereotype.Service;

+ 2 - 4
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/impl/MedalServiceImpl.java

@@ -1,14 +1,12 @@
 package cn.iselab.mooctest.user.service.impl;
 
-import cn.iselab.mooctest.user.dao.MedalDao;
-import cn.iselab.mooctest.user.dao.User2MedalDao;
+import cn.iselab.mooctest.user.mapper.MedalDao;
+import cn.iselab.mooctest.user.mapper.User2MedalDao;
 import cn.iselab.mooctest.user.model.Medal;
 import cn.iselab.mooctest.user.model.User2Medal;
 import cn.iselab.mooctest.user.service.MedalService;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.data.jpa.domain.Specifications;
 import org.springframework.stereotype.Service;

+ 19 - 39
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/impl/UserServiceImpl.java

@@ -1,20 +1,12 @@
 package cn.iselab.mooctest.user.service.impl;
 
-import cn.iselab.mooctest.user.dao.UserDao;
+import cn.iselab.mooctest.user.mapper.UserMapper;
 import cn.iselab.mooctest.user.model.User;
 import cn.iselab.mooctest.user.service.UserService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.data.jpa.domain.Specifications;
 import org.springframework.stereotype.Service;
 
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-import java.lang.reflect.Field;
 import java.util.List;
-import java.util.Map;
 
 /**
  * @author sean
@@ -24,57 +16,45 @@ import java.util.Map;
 public class UserServiceImpl implements UserService {
 
     @Autowired
-    private UserDao userDao;
+    private UserMapper userMapper;
 
     @Override
     public User findByEmail(String email) {
-        return userDao.findByEmail(email);
+        return userMapper.findByEmail(email);
     }
 
     @Override
     public User findByMobile(String mobile) {
-        return userDao.findByMobile(mobile);
+        return userMapper.findByMobile(mobile);
     }
 
     @Override
     public User register(User user) {
-        return userDao.save(user);
+        String email = user.getEmail();
+        userMapper.insert(user);
+        user = userMapper.findByEmail(email);
+        return user;
     }
 
     @Override
     public User findById(Long userId) {
-        return userDao.findById(userId);
+        return userMapper.findById(userId);
     }
 
     @Override
     public User update(User user) {
-        return userDao.save(user);
+        userMapper.updateAddress(user);
+        userMapper.updateAvailability(user);
+        userMapper.updateEmail(user);
+        userMapper.updateMobile(user);
+        userMapper.updatePassword(user);
+        userMapper.updatePhotoUrl(user);
+        userMapper.updateName(user);
+        return userMapper.findById(user.getId());
     }
 
     @Override
-    public List<User> findByCondition(Map<String, String> condition) {
-        Specification<User> where = Specifications.where(getUserWhereClause(condition));
-        return userDao.findAll(where);
-    }
-
-    private Specification<User> getUserWhereClause(Map<String, String> condition) {
-        return new Specification<User>() {
-            @Override
-            public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
-                Predicate predicate = cb.disjunction();
-
-                Field[] fields = User.class.getDeclaredFields();
-                for (Field field : fields) {
-                    String fieldName = field.getName();
-                    if (condition.containsKey(fieldName)) {
-                        predicate.getExpressions().add(
-                                cb.like(root.get(fieldName), "%" + condition.get(fieldName) + "%")
-                        );
-                    }
-                }
-
-                return predicate;
-            }
-        };
+    public List<User> findByFuzzyName(String name) {
+        return userMapper.findByFuzzyName(name);
     }
 }

+ 1 - 2
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/UserLogic.java

@@ -3,7 +3,6 @@ package cn.iselab.mooctest.user.web.logic;
 import cn.iselab.mooctest.rpc.user.data.UserDTO;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * @author sean
@@ -23,5 +22,5 @@ public interface UserLogic {
 
     UserDTO updateUser(UserDTO userDTO);
 
-    List<UserDTO> findByCondition(Map<String,String> condition);
+    List<UserDTO> getUserByFuzzyName(UserDTO userDTO);
 }

+ 5 - 12
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/impl/UserLogicImpl.java

@@ -1,7 +1,6 @@
 package cn.iselab.mooctest.user.web.logic.impl;
 
 import cn.iselab.mooctest.rpc.user.data.UserDTO;
-import cn.iselab.mooctest.user.constants.Converter;
 import cn.iselab.mooctest.user.model.User;
 import cn.iselab.mooctest.user.service.UserService;
 import cn.iselab.mooctest.user.web.exception.HttpBadRequestException;
@@ -11,9 +10,7 @@ import cn.iselab.mooctest.user.web.wrapper.UserWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 
 /**
  * @author sean
@@ -86,17 +83,13 @@ public class UserLogicImpl extends BaseLogic implements UserLogic {
     @Override
     public UserDTO updateUser(UserDTO userDTO) {
         User user = userWrapper.unwrap(userDTO);
-        return userWrapper.wrap(userService.update(user));
+        user = userService.update(user);
+        return userWrapper.wrap(user);
     }
 
     @Override
-    public List<UserDTO> findByCondition(Map<String , String> condition) {
-        List<User> userList = userService.findByCondition(condition);
-        List<UserDTO> userDTOList = new ArrayList<>();
-        for (User user : userList) {
-            userDTOList.add(Converter.convert(UserDTO.class,user));
-        }
-        return userDTOList;
-
+    public List<UserDTO> getUserByFuzzyName(UserDTO userDTO) {
+        List<User> users = userService.findByFuzzyName(userDTO.getName());
+        return userWrapper.wrap(users);
     }
 }

+ 8 - 0
mooctest-user-server/src/main/resources/application.yaml

@@ -26,6 +26,7 @@ spring:
 spring:
     profiles: dev
     datasource:
+        driverClassName: com.mysql.jdbc.Driver
         url: jdbc:mysql://127.0.0.1:3306/mooctest_user?useUnicode=yes&characterEncoding=UTF-8
         username: root
         password: zhangxin
@@ -43,6 +44,13 @@ spring:
 server:
     port: 8081
 
+
+
+mybatis:
+    typeAliasesPackage: cn.iselab.mooctest.user.model
+
+
+
 logging.config: classpath:log4j2.yaml
 
 ---

+ 2 - 4
mooctest-user-server/src/test/java/cn/iselab/mooctest/user/service/impl/IntegralServiceImplTest.java

@@ -1,15 +1,13 @@
 package cn.iselab.mooctest.user.service.impl;
 
-import cn.iselab.mooctest.user.dao.User2IntegralDao;
-import cn.iselab.mooctest.user.dao.UserIntegralDao;
+import cn.iselab.mooctest.user.mapper.User2IntegralDao;
+import cn.iselab.mooctest.user.mapper.UserIntegralDao;
 import cn.iselab.mooctest.user.service.IntegralService;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 
-import static org.junit.Assert.*;
-
 /**
  * @Author ROKG
  * @Description