发表于: 2020-05-12 21:19:44
1 1362
今天早上来的时候准备完成上传代码到git,昨天代码已经敲好了,就是下载git太费时间,就放到今天来做。
把代码上传到git之后,准备在今天的日报上粘贴链接的时候才看到昨天的日报没有提交。今天准备学习任务一深度思考的内容。
今天完成的事情:将任务一上传github,学习mybatis动态语句
一、mybatis动态语句有4种元素
if 作用:条件判断(单条件判断)
choose(when、otherwise) 作用:条件选择 (多条件分支预判断)
where、set 作用:辅助 处理sql语句拼接问题
foreache 作用:循环
set标签 if标签 where标签的整合
if标签 如果name 值不为null 或者 ‘’时 才会进行修改操作
where标签会知道如果它包含的标签中有返回值的话,它就插入一个‘where’。此外,如果标签返回的内容是以AND 或OR 开头的,则它会剔除掉。
<update id="updateStudent" parameterType="com.itxzy.bean.Student">
UPDATE tbStudent
<set>
<if test="name != null and name != ''">
name = #{name},
</if>
</set>
<where>
<if test="id != null and id != ''">
AND id = #{id}
</if>
</where>
接口方法
void updateStudent( Student student);
foreach标签 主要是迭代一个集合,通常是用于IN条件
<delete id="deleteStudent" parameterType="long">
DELETE FROM `t_student` WHERE id IN
<foreach collection="array" item="arr" open="(" separator="," close=")" >
#{arr}
</foreach>
</delete>
接口方法
void deleteStudent(Long []arr);
还有choose 这些,我准备等应用到的时候再学习
二、通过注解方式配置数据库
在接口中还使用了注解的方法来配置 添加标签 后写sql语句
@Insert("INSERT INTO tbStudent(create_at,name) VALUES(#{create_at},#{name},)")
void insertStudent(Student student);
@Delete("DELETE tbStudent WHERE id = #{id}")
void deleteStudent(Student student);
@Update("UPDATE tbStudent SET create_at = #{create_at},name=#{name} WHERE id=#{id}")
void updateStudent(Student student);
@Select("SELECT * FROM tbStudent WHERE id = #{sid}")
Student findStudentById(Integer userId);
@Select("SELECT * FROM tbStudent WHERE name LIKE #{name}")
List<Student> findStudentByName(String name);
之前的接口
// /**
// * 增加
// */
// void insertStudent(Student student);
//
// /**
// * 删除
// */
// void deleteStudent(Long id);
//
// /**
// * 修改
// */
// void updateStudent( Student student);
//
// /**
// * 通过名字模糊查询
// */
// List<Student> findStudentByName(String name);
//
// /**
// * 通过id查询
// */
// Student findStudentById(Integer userId);
三、反射
啥是反射?
反射就是把java类中的各种成分映射成一个个的Java对象
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意一个方法和属性;
这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制。
反射的作用
1、在运行时判断任意一个对象所属的类
2、在运行时构造任意一个类的对象
3、在运行时判断任意一个类所具有的成员变量和方法
4、在运行时调用任意一个对象的方法;生成动态代理
在网上找到一张很好的图片来说明反射
这个博客讲的很详细,读懂了之后看代码就容易许多
四、然后每日一题(今天开始)
面积超过300W 或者人口超过2500W 这是两个条件,先写好一个再结合一下就可以了
原答案
结果(少输出 name population)
修改后
五、 AOP(Aspect Oriented Programming面向切面编程)
啥是AOP
OOP是开发者定义纵向关系,但是并不允许开发者定义横向关系,所以有部分代码是横向的分布在所有对象层次中,例如日志功能等而与它对应的对象的核心功能毫无关系对于其他类型的代码,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。为了减少系统的重复代码
就出现了AOP,将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。
为啥要用AOP?
AOP的优点:
1-降低模块之间的耦合度。
2-使系统容易扩展。
3-更好的代码复用。
AOP的应用场景:
1.日志处理
2.用户登录
3.权限(Authentication )
4.性能优化(Performance optimization)
5.事务(Transactions )
6.记录跟踪 优化 校准(logging, tracing, profiling and monitoring)
7.调试(Debugging)
8.懒加载(Lazy loading)
9.错误处理(Error handling)
10.资源池(Resource pooling)
11.同步(Synchronization)
啥是切面
编程中,对象与对象之间,方法与方法之间,模块与模块之间都是一个个切面。
切面就是切点和通知的组合体,组成一个单独的结构供后续使用
切点的定义语法:关键字为pointcut,定义切点,后面跟着函数名称,最后编写匹配表达式,此时函数一般使用call()或者execution()进行匹配
pointcut recordLog():call(* HelloWord.sayHello(..));
使用pointcut定义一个名为recordLog的切点函数,其需要拦截的(切入)的目标方法是HelloWord类下的sayHello方法,参数不限。
这篇博客详细的介绍了AOP...以后深入学习时详细看看,目前把小课堂师兄讲的东西全掌握就可以了
先了解这么多,用到再深入
六、 今日一题
看到这个题的需求之后,我发现只需要把 f m 交换就好了,然后发现动态sql语句是在xml文件中用的......就去网上查找了资料
在网上找到的资料是这样写的
写下代码 结果缺报错了 在网上查找正确的使用方法后 应该改成这样
正确的语法是:
CASE 列名 WHEN ‘条件1’THEN ‘结果1’
WHEN ‘条件2’THEN ‘结果2’
ELSE ‘结果3’
END;
今天把深度思考的内容都看了一遍,把觉得重要的AOP、反射记了下来(其实还有Spring),学习了一个新的sql条件语句,跟在xml文件中不一样
明天计划的事情:尝试在服务器上跑一边任务一代码
评论