发表于: 2020-06-24 22:31:25
1 1725
今天完成的事情:
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文件一样的效果。
评论