GY-mybatis

对于框架和工具的学习,以使用为主,理解原理为辅助。

掌握了我们讲的基础上再去网络上拓展下眼界。

GY-mybatis

持久层框架(ORM对象关系映射框架),对jdbc技术的封装,简化开发代码

持久层技术:jdbc、DButils、mybatis、hibernate、jpa、mybatisplus

orm:对象与对象之间的关系映射,持有关系,聚合关系。 《uml模型设计》

1. mybatis能干什么

是一个持久层框架(ORM对象关系映射框架),是对jdbc技术的封装,简化的开发代码,提高开发效率

持久层技术:jdbc,DBUtils,mybatis,hibernate,jpa,mybatisplus

orm:对象与对象之间的关系映射,持有关系,聚合关系,《uml模型设计》

2. 快速使用mybatis

1.安装mybatis
	两个jar包,一个mybatis的核心包,一个mysql数据库驱动包
	
2.创建mybatis的核心配置文件
	在src下创建mybatis-config.xml配置文件
	
3.创建实体类与xml映射文件
	切记把创建的xml映射文件加入到配置文件当中
	
4.调用mybatis的api来加载xml配置文件
	

5.执行数据操作

3. 认识下mybatis的核心对象(重要)

1.SqlSessionFactoryBuilder:该对象作用是用来加载并解析xml配置文件,解析配置文件中的各种标签
(properties,settings,typeAliases,environments,mappers),解析完成该对象可销毁。

2.SqlSessionFactory:sql会话工厂对象。该对象只有一个openSession方法,理解成DataSource连接池。
	生命周期:全局唯一对象。除非有多个数据库环境
	
3.sqlSession:sql会话对象,理解成一个Connection连接,做数据库操作,执行完成后关闭会话对象。
	生命周期:随用随开,用完即关。

该对象中的几个重要方法:selectOne,selectList,insert,delect,update,update,getMapper

4. 认识mybatis的核心配置文件(不重要)

mybatis-config.xml

<configuration>
    <!--数据库环境-->
    <environments default="dev">
        <!--id是自定义的数据库名称-->
        <environment id="dev">
            <!--事务管理器
            JDBC:开启事务
            MANAGED:不开事务  -->
            <transactionManager type="JDBC"></transactionManager>
            <!--type
            UNPOOLED
            /POOLED:自动初始化一个连接池
            /JNDI:已弃用
            -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/stage3"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!--把映射文件集成到配置文件中,为了在调用build方法时,能够解析映射文件-->
    <mappers>
        <mapper resource="com/javasm/sys/mapper/sysuserMapper.xml"></mapper>
    </mappers>

</configuration>
  • 常用标签

    加载<properties>文件:<properties>
    
    配置:
    <settings>
        <setting name="" value="">
    </settings>
        
        一些常用设置:
        	<settings>
            	<!--开启日志-->
            	<setting name="logImpl" value="STDOUT_LOGGING"/>
           		<!--自动驼峰命名转换-->
            	<setting name="mapUnderscoreToCamelCase" value="true"/>
            	<!--开启二级缓存-->
            	<setting name="cacheEnabled" value="true"></setting>
      	 	</settings>
        
    别名:要求绝对不能出现同名的类,mybatis(类名首字母小写)
    <typeAlias>
        <package name="">
    </typeAlias>
        
        例:一些常用设置
        	<typeAliases>
            	<package name="com.javasm"></package>
        	</typeAliases>
    

5. 认识mybatis的映射文件(最重要)

1.根标签mapper的namespace属性:
	不同的映射文件通过namespace来区别,不能同名.

2.查询语句select标签,id,parameterType,resultType属性:
	id:在同一个映射文件中,id必须唯一;
	parameterType:可省略,一般都写上,表示在调用selectOne或selectList或insert,delete,update方法时传入的参数类型.
	resultType:数据库查询结果的单行记录封装的类型.(一般是实体类或Map,简单类型)
	
3.sql语句中的#{}与${}表达式获取参数
	两者作用是一致的,都是用来获取参数的,
	#{} 底层采用sql语句预编译,PrepareStatement
	${} 底层采用Statement对象来执行sql操作,适合于用在动态排序.

6. 认识SqlSession对象中常用方法

selectOne("",Object)
selectList("namespace.id",Object)
insert
delete
update
getMapper(Class clz)重要

7. 多参数传递

1.把多个参数封装实体类
2.把多个参数封装到map
3.在映射接口的方法的每个形参上加@Param注解指定名称.#{param注解的名称}

8. 模糊查询

<select id="selectRolesByRoleName" parameterType="String" resultType="Sysrole">
  select * from sysrole where rname like "%"#{rname}"%"  order by update_time desc
</select>

9. 使用mybatis过程中常见的异常信息

1.实体类没有对应的get方法,错误原因:#{写错}
org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'rid22' in 'class com.javasm.sys.entity.Sysrole'

2.映射文件中id重名
Error parsing Mapper XML. The XML location is 'com\javasm\sys\mapper\sysroleMapper2.xml'. Cause: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.javasm.sys.mapper.SysroleMapper.selectRolesOrder

3.调用的方法,在映射文件中是不存在的(接口中有方法,映射文件中没有)
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.javasm.sys.mapper.SysroleMapper.selectRolesByRoleName2

其他注意点:

date:年月日
datatime:年月日时分秒
timestamp:时间戳字段,能够根据时间戳自动更新值。带毫秒类型字段,类型字段,一般在createTime与uodateTime字段上,能够根据时间戳自动更新。指定默认值     now()        CURRENT_TIMESTAMP

切记select列表查询order by update_data desc

以后主键不再使用自增id,为了后续的数据库分库分表,id设计为varchar型,添加数据的时候手工指定id,UUID

数据库字段名不允许a_colmn的名称,实体类的属性名不允许aColumn,不允许is开头

总结

1.配置文件
	settings标签中的配置,配置日志,配置驼峰命名映射
	typeAlias配置别名
	
2.代码:
	SqlSessionFactoryBuilder:
		作用:加载配置文件初始化连接池,解析映射文件到内存
		生命周期:new SqlSessionFactoryBuilder().build()完成该对象可销毁
		
	SqlSessionFactroy:
		作用:持有了第一步创建出来的连接池与映射文件信息
		生命周期:全局唯一.单例
	
	SqlSession:
		作用:执行数据库操作,主要方法:selectOne.selectList,getMapper
		生命周期:随用随开,用完关闭
		
3.映射文件(最重要)
	根标签mapper的namespace属性值,必须是接口的全名称(包名.类名)
	select子标签,属性:id,resultType,parameterType
	获取动态参数表达式:#{}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值