mybatis初步学习

1.Mybatis是干什么的?解决了什么问题?有什么好处?

答:它是一款轻量级的持久层框架,支持了定制化Sql,存储过程和高级映射。Mybatis避免了所有jdbc代码和手动设置参数以及获取结果集。Mybatis可以使用简单的XMl或注解来配置和映射原生信息,将接口和Java的pojos映射成数据库中的记录。

2. 如何安装mybatis

使用 MyBatis,只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中。

 <dependency>

       <groupId>org.mybatis</groupId>

       <artifactId>mybatis</artifactId>

       <version>3.3.0</version>

</dependency>

3.mybatis使用的流程,实现的流程?

         1核心配置文件:xml文件,全局的配置文件,放到maven项目下的resources中,或者web项目下的src, 在这里我们要配置数据源,事务的处理,加载其他的mapper配置文件。

简单实例:

//头文件

<?xml version="1.0"encoding="UTF-8" ?>

<!DOCTYPE configuration

PUBLIC "-//mybatis.org//DTD Config3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

         <!--加载属性文件 -->

         <propertiesresource="db.properties">

                   <!--properties中还可以配置一些属性名和属性值  -->

                   <!--<property name="jdbc.driver" value=""/> -->

         </properties>

         <!--全局配置参数,需要时再设置 -->

         <!--<settings>

         </settings>-->

         <!--和spring整合后 environments配置将废除-->

         <environmentsdefault="development">

                   <environmentid="development">

                   <!--使用jdbc事务管理,事务控制由mybatis-->

                            <transactionManagertype="JDBC" />

                   <!--数据库连接池,由mybatis管理-->

                            <dataSourcetype="POOLED">

                                     <propertyname="driver" value="${jdbc.driver}" />

                                     <propertyname="url" value="${jdbc.url}" />

                                     <propertyname="username" value="${jdbc.username}" />

                                     <propertyname="password" value="${jdbc.password}" />

                            </dataSource>

                   </environment>

         </environments>

 

         <!--加载 映射文件 -->

         <mappers>

        <mapper resource="mapper/User.xml"></mapper>

         </mappers>

</configuration>

         2创建一个sqlsessionfactory,用于解析配置文件,例如我们在测试类中,可以对配置文件进行解析 

String resource = "SqlMapConfig.xml";

       //如何对配置文件resouce读取解析

       InputStream inputStream = Resources.getResourceAsStream(resource);

       //创建会话工厂,传入mybati的配置信息

       sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

       3我们要通过上面得到的session.factory获取sqlsession

然后创建一个sqlsession(会话,是一个写好的接口,是一个执行器)

  SqlSession sqlSession =sqlSessionFactory.openSession();

  4执行器调用数据库的操作是增删改查 (可以将重复的操作放到缓存中)

 sqlSession.update,insert,delete,select等操作

        5mapper statement(底层对象的封装)对底层数据库进行操作,用到一些输入参数,输出参数,在映射文件中,namespace叫命名空间,是对sql进行分类化管理,管理sql

<mapper namespace="com.neusoft.dao.UserMapper">

      <select id="findUserById"  parameterType="int"resultType="com.neusoft.bean.User">

           SELECT  *  fromuser  where id=#{value};

</select>

</mapper>

 

 

3继续整合,还是不够好,非常复杂?

基于接口的实现

写一个UserMapper的接口,与UserMapper.Xml文件映射,映射的方式即为namespace等改为接口的地址

<mappernamespace="com.neusoft.dao.UserMapper">

<selectid="findUserById"中id必须与接口中方法名一样,

在测试类中,  UserMapperuserMapper=sqlSession.getMapper(UserMapper.class);

用sqlsession.getMapper();加载接口,基于反射机制。还没有很懂。

4优化

为为实体类定义别名,简化sql映射xml文件中的引用

在mapper.xml中按如下的写:

  <select id="findUserById"  parameterType="int"resultType="user">

在核心配置文件中:

<typeAliases>

         <typeAliastype="com.neusoft.bean.User"alias="user"></typeAlias>

</typeAliases>

注意:namespace 不能那么写

<typeAliases>

        <package name=" com.neusoft.bean"/>

    </typeAliases>

com.neusoft.bean.User这个实体类的别名就会被设置成User

5解决字段名和实体类属性名不相同的冲突,数据表里第一个字段为order_id,

实体类id

<!--

        根据id查询得到一个order对象,使用这个查询是查询不到我们想要的结果的,

        这主要是因为实体类的属性名和数据库的字段名对应不上的原因,因此无法查询出对应的记录

     -->

    <select id="getOrderById"parameterType="int"

       resultType="me.gacl.domain.Order">

           select * from orders whereorder_id=#{id}

     </select>

<!--

根据id查询得到一个order对象,使用这个查询是可以正常查询到我们想要的结果的,

这是因为我们将查询的字段名都起一个和实体类属性名相同的别名,这样实体类的属性名和查询结果中的字段名就可以一一对应上

-->

<selectid="selectOrder" parameterType="int"

resultType="me.gacl.domain.Order">

select order_idid, order_no orderNo,order_price price from orders where order_id=#{id}

</select>

<!--

根据id查询得到一个order对象,使用这个查询是可以正常查询到我们想要的结果的,

这是因为我们通过<resultMap>映射实体类属性名和表的字段名一一对应关系 -->

<selectid="selectOrderResultMap" parameterType="int"resultMap="orderResultMap">

select * fromorders where order_id=#{id}

</select>

<!--通过<resultMap>映射实体类属性名和表的字段名对应关系 -->

<resultMaptype="me.gacl.domain.Order" id="orderResultMap">

<!-- 用id属性来映射主键字段-->

<idpropertyid" column="order_id"/>

<!-- 用result属性来映射非主键字段-->

<resultproperty="orderNo" column="order_no"/>

<resultproperty="price" column="order_price"/>

</resultMap>

    

 

 

 

 

 

  

 

 

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值