Java基础知识——mybatis(CRUD,配置文件解耦合,连接池,动态SQL)

CRUD

具体代码实现
基本操作:where>group by>having>order by>limit
增:
insert into 表名称(指定列1,指定列2)
INSERT INTO user(username,birthday,sex,address) VALUES (#{username},#{birthday},#{sex},#{address})

删:
DELETE FROM user WHERE id = #{uid}

改:
UPDATE user SET username = #{username}, birthday = #{birthday}, sex = #{sex}, address = #{address} WHERE id = #{id}

查:
模糊查询: SELECT * FROM user WHERE username LIKE #{name}
mapper.listUsersByName("%王%");传入的name需要加入模糊查询的通配符
聚合函数: SELECT count(id) FROM user

注意:
如果只是调用方法而没有sqlSession.commit(),那么提交失败事务自动回滚
因此,如果需要自动提交事务,只需factory.openSession(true);
同时,可以设置事务的隔离级别,是一个enum枚举类型

private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit)

映射配置文件:

类名+类的方法名——》存储类型+执行的SQl语句
类名:在getMapper时候定义
id:类的方法名的定义
parameterType:表示将会传入这条语句的参数类的完全限定名或别名完全限定名或者是基本类型引用类型
1:格式:#{username}=User.username
2:遵循OGNL原则:
Object Graphic Navigation Language
即若parameterType是实体类的包装类(POJO)QueryVo,则
#{user.username}=user.getUsername()
3:遵循单个参数自动匹配原则。即如果parameterType为一个基本类型或包装类,会自动匹配到SQL语句的参数中不需要名字对应

resultType:
如果有多个返回值User,会自动封装成List

为了解决实体类属性名与数据库表列名不一致,有以下解决方法:
1:在 SQL 语句中为所有列起别名,使别名与实体类属性名一致(执行效率相对高,开发效率低)

SELECT id AS userId, username AS userName, birthday AS userBirthday, sex AS userSex, address AS userAddress FROM user

2:
在映射文件中使用 resultMap 完成结果集到实体类的映射(执行效率相对低,开发效率高)


    
    
        
        
        
        
        
    
    
    

配置文件的解耦合

1:主配置文件:数据库连接的dataSource直接写入源码中,耦合度很强。

改进方法:利用properties


	


此时就可以读取外部的配置文件,读入键值对

2:同样的映射文件Mapper中