侧边栏壁纸
博主头像
王小木人个人技术文章记录

这是很长,很好的一生

  • 累计撰写 141 篇文章
  • 累计创建 43 个标签
  • 累计收到 10 条评论

目 录CONTENT

文章目录

框架

王小木人个人技术文章记录
2021-05-26 / 0 评论 / 0 点赞 / 1,924 阅读 / 5,296 字

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 deptList=sqlSession.selectList("com.wl.entity.Department.selectAllDept");
      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

 #{deptNo}

参数

数组--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>集合

                                             administrator@example.org               support@example.org               development@example.org                                                                                                          userName:唐三                                                                                                                                                                      just some string                                           

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和形参不一样时指定

0

评论区