栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Week--My batis

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Week--My batis

1.使用mybatis的操作步骤--

1.1Mybatis核心配置以及映射配置文件

 
    org.mybatis
    mybatis
    3.5.4




	



	

	
    
    
        
        
            
            
            
            

                
                
                
                

                
                
                
                
            
        
    
	
    
    
        
    

1.2定义mapper接口

//定义mapper接口(相当于之间xxxDao:数据访问接口)

 
        List findAllUser() ;

1.3配置映射文件

	



	

    
    
    
            select  * from  user
    

1.3测试类

public class MyBatisTest {

    InputStream inputStream ;
    SqlSession sqlSession ;
    StudentMapper studentMapper ;//接口对象声明

    @Before
    public void init() throws Exception {
        //1)驱动mybatis核心配置文件
         inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        //创建SqlSessionFactoryBuilder构造者设计模式
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder() ;

        //通过加载资源文件输入流,获取SqlSessionFactory接口工厂
        SqlSessionFactory sqlSessionFactory = builder.build(inputStream);
        //创建执行对象
         sqlSession = sqlSessionFactory.openSession();//开启手动提交

        //获取接口代理对象
        studentMapper = sqlSession.getMapper(StudentMapper.class) ;
    }
    
    //测试查询所有的学生
    @Test
    public void testFindAll(){

        List list = studentMapper.findAll();
        if(list!=null){
            for(Student student:list){
                System.out.println(student);
            }
        }
    }
}

2.mybatis插入数据,获取自增长主键id的值

mybatis插入数据的时候,获取表中自增长主键id的值
 	insert标签中有子标签seletkey,属性如下:
     keyProperty:实体类中的属性值 (通过id字段要和表中id字段映射)
     keyColumn:表中的主键字段  id字段
     order:什么时候执行 sekectKey标签中的语句
            AFTER 在执行插入之后,执行selectkey的语句,获取最后一次自增长主键的id值
            	SELECT LAST_INSERT_ID()
            BEFORE: 插入数据之前执行
			resultType:获取到的自增长主键的类型 int


    
                    SELECT LAST_INSERT_ID()
    
 insert  into  student(name,age,address,birthday) values(#{name},#{age},#{address},#{birthday})

3.1封装vo实体类

//包装的实体类--里面包含的一个学生类
public class QueryVo {
    
    private Student student ;

    public Student getStudent() {
        return student;
    }

    public void setStudent(Student student) {
        this.student = student;
    }
}

3.2mybatis基本模糊查询

    
        
        select * from student where name like #{student.name}
    

4.传统dao的弊端

1)开发过程还需要核心配置文件,也需要映射文件,代码大量加大,还需要提供接口实现类
2)从内存角度考虑:以后需要在业务层需要频繁的数据访问接口,不断的开辟堆内存空间;
3)开发中遵循"低耦合,高内聚",而传统dao的程序之间出现耦合性,而降低耦合性经常使用的技术"反射技术";
mapper代理的方式:使用到了jdk动态代理,就比这种传统方式优秀!

5.mybatis注解开发流程


	
//StudentMapper

@Select("select * from student")
 //@Select注解:查询的---替代了xx.xml映射文件中的select标签
    List findAll() ;

@Delete("delete from student where id = #{id}") //代替映射文件中的delete标签
    void deleteStudent(int id) ;

@Update("update student set name = #{name},age = #{age},address = #{address},birthday = #{birthday} where id = #{id}) //代替update标签
    void updateStudentById(Student student) ;

 @Insert("insert into student(name,age,address,birthday) values(#{name},#{age},#{address},#{birthday})) //代替了insert标签
    void addStudent(Student student) ;

6.读取外部配置文件,获取jdbc连接信息以及加入实体类包扫描


	







    
    
    
    

 
        

	

7.mybatis的原理

架构体现:
    1)准备核心配置文件 mybatis-Config.xml---->mybatis的Resources就来读取配置文件的内容
    2)将配置文件内容---->每一个标签--->封装到一个类中,作为它的属性:Configuration类(配置类)
    3)加载映射器 Mappers -->里面配置的mapper的sql映射文件---->MapperRegister:Mapper注册器
    
Configuration类(配置类):
    //创建SqlSessionFactoryBuilder--->构建者,就是将资源输入流的内容,封装Configuration类
    //创建SqlSessionFactory接口工厂------>通过子实现类 DefaultSqlSessionFactory进行创建
    
    4)创建SqlSesison:执行对象---->底层有接口Executor执行器 ----->最终就是创建一个PreparedStatement:预编译对象
    5)T  getMapper(Class class):---->mapper代理底层就是一个jdk动态代理,针对XXXMapper接口 产生代理对象(jdk动态代理前提基于接口实现)--->MapperProxy implements InvocationHandler

8.mybatis的参数绑定

//@Param("将指定的参数绑定到这个注解中,起一个名称")
//按照学生姓名和地址查询学生信息
Student findStudentByNameAndAddress(@Param("name") String name,@Param("addr") String address) ;

//参数绑定的使用

        select * from student where name = #{name} and
        address = #{birthday}



//创建Map集合
Map map  = new HashMap<>() ;
//给映射文件中的参数进行赋值
map.put("name","刘桑") ;
map.put("birthday","1996-12-10 00:00:00") ;

10.连接池的特点

连接池的特点:
	创建一些固定的可重用的连接对象,重复利用它,当某个连接对象被某个持有的线程使用完毕之后,然后归还连接池中.

11.mybatis启用德鲁伊的连接池

1)导包

            
            com.alibaba
            druid
            1.1.13


2)配置文件:使用自己的连接池:自定义一个工厂类 继承了 mybatis里面的PooledDataSourceFactory
         
         
         
         
         
         
         
            
         
3)自定义这个类继承自mybatis的连接池数据源工厂类
	public class MyDruidDataSourceFactory extends
        PooledDataSourceFactory {
        //构造方法
        public MyDruidDataSourceFactory(){
        //创建德鲁伊的数据源对象
        this.dataSource = new DruidDataSource() ;
    }
}

12.mybatis的高级映射resultMap

使用场景:
	 1)当实体类属性和字段一样 
	 2)mybatis多表查询的时候可以用
	 
使用步骤:
	首先在映射文件中定义resultMap,然后在具体的增删改,查询语句中将reusltMap引入,resultMap里面就是可以将每一个字段和实体类的属性一一映射

12.1 定义resultMaop

	

        
        
        
        
        
        
        
    

 

       select * from student
        
         
             
             
                 name = #{stuName}
             
             
                and  address = #{stuAddress}
             
         
    

14.动态sql片段

动态的sql片段将重复性的sql抽取出来,在其他sql中引入这个sql片段即可
 
        select  * from student
       
 

15.动态aql--for each遍历数据

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/775653.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号