mybatis
替代jdbc
持久层框架 MyBatis,Hibernater,IBatis(MyBatis的前身)
框架搭建
1>导包
MyBatis 的核心包
MyBatis依赖包
Junit单元测试包
数据库驱动包
2>配置文件
log4j配置文件
log4j.properties 放在src下
Mybatis 配置文件
sqlMapConfig.xml
3>获取SqlSession对象
sqlSessionFactoryBuilder builder= new sqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(sqlMapConfig路径);
SqlSession sqlsession=factory.openSession();
3.Junit单元测试
1>导包
2>使用单元测试
方式一:继承TestCase类,所有方法以test打头
方式二:方法上加@Test注解
查询案例
1.建表
2.建立表的实体类
3.sql(Mapper.xml);
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(Test.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml"));
SqlSession sqlSession=factory.openSession();
List
for(Department dept:deptList)
{
System.out.println(dept);
}
System.out.println("修改----------------");
Department dept=new Department();
dept.setDeptNo(10);
dept.setDeptName("修改后的部门名");
System.out.println(sqlSession.update("com.wl.entity.Department.updateDept",dept));;
sqlSession.commit();
sql 映射文件的使用
select/update/delete/insert
sql/resultMap
7.2 返回值
resultType
sql 映射文件中,属性有type单词的,值一般是类的全地址
1> 返回值类型自定义list
结果集列名和属性名保持一致
2> 简单类型
int --java.lang.Integer
...
3> 返回值为Map
resultMap
定义一个resultMap
参数
#
参数类型指定,paremeterType
a.参数类型为简单类型,int String并且参数个数唯一,#{名字随意}
b.参数为实体类对象,参数为属性名,实体类的无参构造和get,set方法
c.参数类型为Map 参数为map的key值和sql语句的key保持一致 参数没有实体类时使用,例如联表查询
模糊查询
1> $ 存在sql注入,不推荐使用
说明:# 占位符
$ 替换
2> 字符串连接符 || 或是concat
like '%'||#||'%'
特殊字符
1.使用转义字符
< <
> >
2. 使用cdata标签 标签内的只是普通文本
<![cdata [语句]]>
别名
1>mybatis 内置别名
2>
cnfig.xml中
sqlMapConfig标签
properties 标签
动态标签
1> sql
将sql语句提取到公共的部分
sql语句
语句中引用公共块
2> if
and deptno=#
如果类型是int时应该判断是否=0
3> where
条件语句
当后面有条件时会自动加上where
语句
当修改时set有值就加上set
4> foreach
参数
数组--arrsy
list--list
map--map中的key
实体类--实体类中的属性名
批量删除
int[] ids=new int[]
删除时,当参数只有一个时,参数类型可以不写
dao模式
Mapper代理
dao层简化,只要一个接口和mapper.xml
1.mapper.xml中的namespance指向接口地址
2.接口中的方法名和mapper.xml中的id一样
3.接口中方法的返回值和参数需要和mapper.xml的sql中的保持一致
sqlSession.getMapper方法获取指定接口代理类
关联映射
resultMap简化
懒加载
使用懒加载sql就必须使用嵌套查询
集合映射
主键返回
自增长(序列)
guid 或uuid
自定义规则
新增时,同步返回主键
Spring 模块化的设计
AOP:面向切面编程(代理)
IOC:Core Container 核心容器
mvc框架,orm映射框架
项目中的Spring 一般指AOP,IOC,如果用到了mvc框架,
一般指SpringMvc
项目中的Spring作用,创建,管理所有的实例对象,实例中依赖对象的赋值。实例对象不是局限于service,dao还有包中的对象,比如SqlSession
Spring 框架的搭建
1>导包
核心包
依赖包
log4j包
junit测试包
2>配置文件
Log4j.properties
Spring配置文件:applicationContext.xml
3>测试
1.提供service
2.配置service 的Bean节点
3.从Spring 中获取service的实例
创建spring工厂
ApplicationContext context=new ClassPathXmlApplicationContext("application.xml")
context.getBean("deptsevice");
IOC
inversion of control 控制反转
项目中,对象实例的控制权的问题
项目中,对象实例,new 一个对象,那么这个对象的生命周期控制权在程序员手中
控制反转:指的就是项目中对象的实例,由核心容器(ioc,对象工厂)创建和管理生命周期
beans中的对象默认采用单例模式,可以修改
DI
依赖注入
比如Service中需要使用Dao的
set注入
1.设置set方法
2.配置bean节点
3.bean中配置需要依赖赋值的对象
如果属性为String 赋值用value
构造方法注入
<bean id="deptService" class="com.wl.service.impl.DeptServiceImpl">
注入的参数类型
a>自定义的参数类型
b>String
c>集合
IOC/DI使用注解
1.引入context约束
2.开启注解
base-package:需要spring扫描的包
3.代码中使用注解
1.bean节点的对应注解
如果给了参数,beanid为参数,如果未给,则是类名第一个字母小写
依赖注入
@Autowired 自定义对象
@value("值")
面向切面编程 使用代理模式
专有名词
1>连接点(point)
特殊的点,比如方法开始前,方法结束后,比如异常
spring中支持方法级的连接点
2>切点(pointcut)
本质还是连接点,进行了过滤的连接点。需要植入代码的连接点
3>增强(advice)
需要植入切面的代码
4>代理(proxy)
5>织入(waving)
将代码植入到指定的切点
6> 切面(aspect)
在Spring中,需要导入aop依赖的包
aop:config
<aop:aspect id="serviceAspect" ref="adviceService">
<aop:pointcut id="servicePointCut"
expression="execution(* com.wl.service.impl..(..))" />
<aop:before pointcut-ref="servicePointCut" method="beforMethod"/>
<aop:after pointcut="execution(* com.wl.service.impl.DeptServiceImpl.add*(..))"
method="afterMethod"/>
</aop:aspect>
</aop:config>
2.Spring +MyBatis集成
1>导包
mybatis核心包
mybatis依赖包
数据库驱动包
spring 核心包
spring依赖包
spring+mybatis集成包
log4j包
junit包
配置文件
log4j.properties
application.xml
sqlMapConfig.xml
Mapper模式
事务管理
xml引入事务xml
1.配置事务管理对象实例
2.配置事务规则,事务针对方法级
3.切面,配置使用事务的类或是包
1.SpringMVC
MVC框架
M model 实体类
v view html jsp
c controller action,servlet
Struts2核心是过滤器
springmvc核心是servlet
mvc框架搭建
RequestMapping("") 请求地址和方法的映射
用在类上后等同于命名空间
方法修饰符 返回值 方法名(形参)
方法修饰符 public
ps -ef 查看进行进程
ps -ef | grep 进程相关
kill -9 进程号 关闭进程
返回值
a.String 需要跳转的页面
b.ModelAndView 可以携带数据也可以跳转页面
c void
不需要框架给我做任何响应
d.返回值为数据对象
1.方法上使用ResponseBody
2json对象转换的jar包
3.mvc配置文件需要开启自动转换
2>方法形参
a.
HttpServletRequest
HttpServletResponse
HttpServletSession
b.ModelAndView
c.ModelMap
d.请求参数
请求中的参数可直接写在形参中
参数类型为实体类 必须要有无参构造
请求对象中含有对象时 参数的名字属性.属性
checkbox进行传值时
自定义类型转换器
实现接口 Converter<原类型,目标类型>
配置转换器工厂
ssm集成
上传
1.jsp页面
@RequestParam("参数的key值") 当页面name和形参不一样时指定
评论区