myabtis基础配置_插入返回主键_多个参数

前言:包结构(基于maven项目)

myabtis基础配置_插入返回主键_多个参数_第1张图片
myabtis基础配置_插入返回主键_多个参数_第2张图片

pom.xml 导入相对应的jar包
myabtis基础配置_插入返回主键_多个参数_第3张图片

1. 全局普通配置, 接口式配置

1.1全局配置
mybatis-config.xml 文件



    
    
        
        
        
        
            
            
            
            
        
    
    
    
        
        
        
        
            
            
            
            
        
    




      
    
    
    



    
   
   
   
   
   
    

0.加载了两个配置文件,jdbc.properties,log4j.properties(就不展示了)
myabtis基础配置_插入返回主键_多个参数_第4张图片
1.批量对引用类型取别名,最好还是不起使用全类名,比较容易查看类型,就是多了些代码
注意:它如果多余不同包同名的java文件,出现别名冲突, 得通过@Alias("")单独指定别名,可以参考下面
在这里插入图片描述
2.并未使用批量注册sql映射文件,而是一个个注册,适合sql映射文件少时,
如果比较多的话,还是批量注册,将sql映射文件放入接口包下,而且必须同包同名
注册的方法有3种,个人还是注册配置文件方式,这样sql映射文件就不需要和接口放一起了,这样的话不会说一个包下文件太多.或者就是使用基于注解,这样就不用映射文件,但是将sql语句写在了接口的方法上,但是不利于维护,也不能体现mybatis的目的
myabtis基础配置_插入返回主键_多个参数_第5张图片
没有sql映射文件,使用注解的方式
在这里插入图片描述

3.对于环境们的配置,现在需要掌握,后续是在spring配置,所以需要了解
像这里配置了oracle数据库环境,mysql数据库环境,只需通过default属性设置不同的id即可切换环境
myabtis基础配置_插入返回主键_多个参数_第6张图片
4.数据库厂商取别名
myabtis基础配置_插入返回主键_多个参数_第7张图片

2.sql(mapper)映射文件

2.1 基本的了解







这些是基本的格式,namespace可以随便取,但如果接口式配置的话,就必须得是接口全名
以及的id必须是接口的方法名
注意:mybatis的传入参数就一个,对于多个参数待会指出.
传入的参数类型可以不写
查询后的结果如果是一个List,但是resultType还是按User的类型取,多个数据按单个类型取
可以指出数据库类型,databaseId指出
使用了#{} ,后续还有${},大致了解一下
myabtis基础配置_插入返回主键_多个参数_第8张图片
2.2参照sql映射文件
未使用接口式配置





    
    
    

主要讲解下#{},${}
#{变量名} 一个占位符,对于传入的字符串自动加’’
KaTeX parse error: Expected 'EOF', got '#' at position 58: …么里面的变量名随便起 ,比如 #̲{id} …{value},就是变量名固定死了,所以两种写法#{id}, ${value}

第二个例子:就只能使用${value},使用#{}会自动对字符串加’’
1.读取配置文件 2.创建SqlSessionFactory对象 3.创建SqlSession
4.使用它自带的方法 selectOne()…

//1.读取配置文件
//全局配置文件的路径
String resource = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
//2.创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = 
                         new SqlSessionFactoryBuilder().build(is);
/*
  3.创建SqlSession
        能直接执行映射的sql语句
        openSession()有一个传入boolean的方法
        默认是false,需要手动提交事物,设置为true,就自动提交事物
 */
SqlSession sqlSession = sqlSessionFactory.openSession();
//4.调用SqlSession的方法
try {
   /*
   1.查询
   selectOne("映射文件的id.id",值)
   */
User user = sqlSession.selectOne("MyMapper.selectUser2", 2);
List userList = sqlSession.selectList("MyMapper.selectUser3","user");
System.err.println(user);
//System.err.println(userList.size());
} catch (Exception e) {
         e.printStackTrace();
   }finally {
            //5.关闭资源
       sqlSession.close();
  }

接口式写法





    

 

前面一样,都是1.读取配置文件 2.获取SqlSessionFactory对象 3.获取SqlSession对象
4.接着就是获取接口的实现类对象,动态代理获取该对象 5.调用接口中的方法

 //1.读取配置文件
//全局配置文件的路径
String resource = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
//2.创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory =  
                     new SqlSessionFactoryBuilder().build(is);
//获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取接口的实现类对象
//会为接口自动的创建一个代理对象,代理对象去执行方法
UserDao userDao = sqlSession.getMapper(UserDao.class);
//动态代理,获取到了该对象
System.err.println(userDao.getClass());
User user = userDao.getUserByIdAndUser(3,"张三");
System.err.println(user);
//3.关闭资源
sqlSession.close(); 

综合来说前面步骤一样

//1.读取配置文件
//全局配置文件的路径
String resource = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
//2.创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = 
    new SqlSessionFactoryBuilder().build(is);
//获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();

/*
  一种是使用SqlSession对象的方法
*/
/* 
  另一种是接口式配置,使用接口中的方法.先获取接口的实现类对象,为接口自动创建一个代理对象,代理对象去执行方法
   */

(ps:后续的操作都是建立在接口式配置)
2.3插入并返回主键值
对于支持主键自增的数据库,如Mysql数据库,mybatis支持设置属性
userGenerateKeys默认是false,设置为true
keyProperty属性是返回javaBean的哪个






     insert into sc0926.userpsd(u_user, u_psd, u_date) 
     values(#{u_user},#{u_psd},#{u_date})
 
        

对于Oracle数据库,没有自增主键,通过sequnce序列设置的,可以通过一般方法:
查询主键,在标签内需要输入查询主键的sql
keyProperty属性,可以使用字段名;resultType类型,字段的类型
order:指定查询主键的sql和insert语句的执行顺序,相对于insert语句来说
last_insert_id():该函数是Mysql数据库的,获取自增主键的id,它必须配合insert语句一起使用






    
        select last_insert_id();
    
    insert into sc0926.userpsd(u_user, u_psd, u_date) 
              values(#{u_user},#{u_psd},#{u_date})



    
        select seq_userpsd.currval from dual
    
    insert into BIGPIG.USERPSD 
                values(seq_userpsd.nextval,#{u_user},#{u_psd},#{u_date})



推荐使用这个一般方法,比较适合多种数据库
2.4多个参数传入
查询时,不可能查询条件只有一个,有时候多个条件,那么就得传入多个参数
mybatis对于参数,只能接受一个,是指它将传入的参数都疯转成了一个Map
那么map中的key对应多个value,如果取出第一个,第二个参数值,#{param1},#{param2}…


这样不太利于维护,所以我们可以使用注解命名,使用别名

public interface UserDao {
     User getUser( Integer u_id);
     void addUser(User user);
     void updateUser(User user);
     void deleteUser(Integer u_id);
     /**
      * 使用注解@Param,可以给参数命名,这样多个参数传值时,可以直接使用名字取值
      * 由于多个参数被封装成了map,key:param1,param2...
      * 虽然可以直接通过#{parm1}取值,但是不利于维护
      * 可以给参数命名,然后#{u_id}取值,这样利于维护
      * @param u_id
      * @param u_user
      * @return
      */
     User getUserByIdAndUser(@Param("u_id") Integer u_id,
                             @Param("u_user") String u_user);
}

1.如果多个参数正好是业务模型,直接传入pojo就可以了,也即是javabean类型
#{属性名},也即是JavaBean的字段名.
2.如果传入的参数不是业务模型中的数据,没有对应的pojo,为了方便,传入map
#{key}也就是取出map中对应的值

思考题:
myabtis基础配置_插入返回主键_多个参数_第9张图片

你可能感兴趣的:(mybatis)