发表于: 2020-06-24 22:31:25

1 1724


今天完成的事情:

1.解决spring和mabatis整合用配置类配置数据库的错误(扫描不到service包的问题),使用这个配置类进行增删改查。

2.完成验收标准的使用mybatis注解的方式去操作数据库。

使用配置类:

@RunWith(SpringJUnit4ClassRunner.class)
//使用配置类
@ContextConfiguration(classes = ConfigClass.class)
public class TestSpringAndMybatis {
@Autowired
   private StudentService studentService;

   

昨天的service包扫描不出的解决办法

首先要开启自动扫描

给实现类添加@Service注解告诉spring需要用到StudenService接口的实例。

@Service("studentService")
public class StudentServiceImpl implements StudentService {
@Resource
   private StudentMapper studentMapper;

使用配置类,加上自动注入注解,把刚才标记的实例进行自动注入


几个关键注解

@Configuration//给类加这个注解,表明这个类是配置类
/**
* 扫描service方便自动注入service的实例对象
*/
@ComponentScan("service")
/**
* 加载配置文件
*/
@PropertySource(value = {"classpath:db.properties"}, ignoreResourceNotFound = true)
/**
* 自动扫描dao包下的Mapper,然后自动生成代理对象
*/
@MapperScan(basePackages = {"dao"}, sqlSessionFactoryRef = "sqlSessionFactory")


mybatis注解操作数据库

public interface StudentAnnotationMapper {
@Insert("insert into student_task1(\n" +
"        student_name,enter_time,qq,school,student_number,study_type,log_link,slogan,brother,create_at,update_at)\n" +
"         values (\n" +
"        #{name},#{enterTime},#{qqNumber},#{school},#{studentNumber},#{type},#{logLink},#{slogan},#{brother},#{createTime},#{updateTime})\n")
    @Options(keyProperty = "id", useGeneratedKeys = true)
   /**
    * 插入学生数据返回id
    * @date 2020/6/24 19:56
    * @param student
    * @return void
    **/
   void insertStudent(Student student);

   /**
    * 根据id删除学生
    * 删除方法
    *
    * @param id
    * @return boolean
    */
   @Delete("delete from student_task1 where id=#{id}")
   boolean deleteById(int id);

   /**
    * 使用动态sql去根据id更新学生
    *
    * @param student
    * @return boolean
    * @date 2020/6/24 19:59
    **/
   @UpdateProvider(type = StudentAnnotationInner.class, method = "updateById")
   boolean updateById(Student student);

   /**
    * 注解方式的resultMap
    *
    * @param id
    * @return
    */
           @Results(id = "studentResultMap", value = {
           @Result(column = "id", property = "id"),
           @Result(column = "student_name", property = "name"),
           @Result(column = "enter_time", property = "enterTime"),
           @Result(column = "student_number", property = "studentNumber"),
           @Result(column = "qq", property = "qqNumber"),
           @Result(column = "school", property = "school"),
           @Result(column = "study_type", property = "type"),
           @Result(column = "log_link", property = "logLink"),
           @Result(column = "slogan", property = "slogan"),
           @Result(column = "brother", property = "brother")
})
@Select("select *from student_task1 where id=#{id}")
/**
    * 根据id查找学生
    * @date 2020/6/24 20:03
    * @param id
    * @return pojo.Student
    **/
   Student selectById(int id);

   @ResultMap("studentResultMap")
@Select("select *from student_task1")
/**
    * 查找全部学生
    * @date 2020/6/24 20:03
    * @param
    * @return java.util.List<pojo.Student>
**/
   List<Student> selectAll();

   @ResultMap("studentResultMap")
@Select("select *from student_task1 where student_name like   CONCAT(#{name},'%')")
/**
    * 根据姓名查找学生
    * @date 2020/6/24 20:04
    * @param name
    * @return java.util.List<pojo.Student>
**/
   List<Student> selectByName(String name);

   @ResultMap("studentResultMap")
@Select("select  *from student_task1 where student_number like CONCAT(#{studentNumber},'%')")
/**
    * 根据学号查找学生
    * @date 2020/6/24 20:04
    * @param number
    * @return java.util.List<pojo.Student>
**/
   List<Student> selectByNumber(String number);

   /**
    * 定义一个获取动态sql的内部类
    *
    * @author 韦延伦
    * @date 2020/6/24 15:02
    **/
   class StudentAnnotationInner {
public String updateById(final Student student) {
/**
* 返回sql语句的匿名内部类
*/
  return new SQL() {{

 UPDATE("student_task1");

if (student.getStudentNumber() != null) {

SET("student_number=#{studentNumber}");
                   }
if (student.getSchool() != null) {
SET("school=#{school}");
                   }
if (student.getQqNumber() != null) {
SET("qq=#{qqNumber}");
                   }
if (student.getType() != null) {
SET("study_type=#{type}");
                   }
if (student.getLogLink() != null) {
SET("log_link=#{logLink}");
                   }
if (student.getSlogan() != null) {
SET("slogan=#{slogan}");
                   }
if (student.getBrother() != null) {
SET("brother=#{brother}");
                   }
if (student.getEnterTime() != null) {
SET("enter_time=#{enterTime}");
                   }
if (student.getName() != null) {
SET("student_name=#{name}");
                   }
WHERE("id=#{id}");              

}}.toString();

@UpdateProvider 说明要用动态sql的更新语句

@Results 相当于xml 文件的resultMap

 @Options(keyProperty = "id", useGeneratedKeys = true)  插入数据返回主键

明天计划的事情:

通过回答深度思考的问题回顾一下任务一。
遇到的问题:无
收获:学会使用spring注解的方式去做一个配置类,使用这个配置类去操作数据库达到与xml文件一样的效果。


返回列表 返回列表
评论

    分享到