MyBatis初学及基本增删改查操作

MyBatis初学及增删改查基本操作

今天学习了MyBatis框架,与hibernate相比,它是一个半封闭的数据库层框架 ,可以直接操作数据库层,而hibernate则是全封闭的数据库层框架 。 半封闭的mybatis可以接触到sql 方便开发人员进行sql调优 。

1.使用 mybatis框架进行开发:

  1. 打开eclipse,创建Java项目
  2. 导入两个jar包(需要两个 ,一个是mybatis自己的jar ,一个是 mysql驱动jar)并在Bulid Path中Add JARs.
  3. 进行配置(配置文件分为两种,sqlmap核心配置文件,mapper映射文件。 有几张表就对应几个 mapper映射文件 )
建立数据库

表Student

目录结构

在这里插入图片描述

以下关于各部分的详解

1.核心配置文件:SqlMapConfig.xml

<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="devp">
   <environment id="devp">
     <transactionManager type="JDBC"></transactionManager>
     <dataSource type="POOLED">
       <property name="driver" value="com.mysql.jdbc.Driver"/>
       <property name="url" value="jdbc:mysql://localhost:3306/jiangligong"/>
       <property name="username" value="root"/>
       <property name="password" value="123"/>
     </dataSource>
   </environment>
</environments>

<mappers>
  <mapper  resource="com/neuesoft/mapper/studentMapper.xml"/>
</mappers>

</configuration>

在这个核心配置文件中,

  • environments的default属性对应下面多个environment标签中的id值
  • environment的id属性是用来给当前连接数据库环境取个名字
  • transactionmanager的type 属性值如果为 JDBC,代表当前事务管理交由开发人员自己进行管理,若属性值为managed 代表mybatis把事务管理交给第三方别的应用进行管理
  • datasource的type属性是关于数据库连接池的使用。 如果写UNPOOLED代表不需要使用连接池;如果写POOLED代表让mybatis给我们开启数据库连接池作用; 如果值为JNDI,代表数据库连接池功能交给其他应用服务第三方进行管理
  • 4个property标签 分别对应 driver url username password 4个属性值
  • mapper的resource属性:跟随,映射mapper配置文件所在相对路径地址

2.mapper映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace属性对应 我们的mapper接口路径 -->
<mapper  namespace="com.neuesoft.mapper.studentMapper">

<!--增加一条信息-->
  <insert id="addStudent"   parameterType="com.neuesoft.pojo.Student">
    insert  into  student (name,age,sno,telephone) values(#{name},#{age},#{sno},#{telephone})
  </insert>
  
  <!--增加一条信息并返回主键值-->
  <insert id="addStudentBackID"   parameterType="com.neuesoft.pojo.Student">
    <selectKey keyColumn="sid" keyProperty="sid" order="AFTER" resultType="int">
         select LAST_INSERT_ID()
    </selectKey>
    insert  into  student (name,age,sno,telephone) values(#{name},#{age},#{sno},#{telephone})
  </insert>
  
  <!--增加一条信息并返回主键值-->
  <insert id="addStudentBackID2"   parameterType="com.neuesoft.pojo.Student"  useGeneratedKeys="true" keyProperty="sid">   
    insert  into  student (name,age,sno,telephone) values(#{name},#{age},#{sno},#{telephone})
  </insert>
  
  <!--按主键值删除一条信息-->
  <delete id="deleStudentById" parameterType="int">
      delete from student where sid=#{sid}
  </delete>
  
  <!--查询表中所有信息-->
  <select id="queryAll" resultType="com.neuesoft.pojo.Student">
        select * from student
  </select>
  
  <!--按主键值查询表中信息-->
  <select id="queryById" parameterType="int" 
          resultType="com.neuesoft.pojo.Student">
      select * from student where sid=#{sid}
  </select>
  
  <!--按主键值修改信息-->
  <update id="updateStudentById" parameterType="com.neuesoft.pojo.Student"  >
     update student set name=#{name},age=#{age},sno=#{sno},telephone=#{telephone} where sid=#{sid}
  </update>
  
  <!--模糊查询表中信息-->
  <select id="queryLikeName" resultType="com.neuesoft.pojo.Student" parameterType="String" >
      <!--  select * from student where  name like #{name} -->
            select * from student where  name like "%${value}%"
  </select>
  
</mapper>

在mapper映射文件中,

  • mapper 的namespace即命名空间属性。该属性值对应当前mapper配置文件,对应的接口的路径地址,包括该接口的包路径+接口名称)
  • insert,delete,update,select的
    • id属性对应接口中的方法名
    • parameterType 对应方法入参类型 (如果是8大基本类型则直接写类型名例如 int,float,String等都可以.如果是一个引用类型的,这种情况下要书写类全路径地址)
    • resultType 对应方法返回值类型,其内容值同 parameterType (值得注意的是,无论查询返回的是一条还是多条数据 返回值类型都按照一条记录的类型去书写)
  • sql语句写在 insert,delete,update,select 标签之间,如果需要引用,引用类型参数的时候,直接通过#{属性名}进行获取。
  • 智能添加单引号,无需开发人员操心sql中的单引号问题

模糊查询的两种方式

方式一:使用#{}占位符,使用该种形式的时候要注意:要在传递的占位符内容中自行传入 %%
方式二:直接拼接sql 使用${} 。使用该种形式 ,直接写入要查询的模糊词条即可

返回刚添加数据记录的主键ID值(前提条件是当前表的主键设置为自增长的)

有两种方式
方式一:与selectkey标签配合使用,查询刚添加数据的主键值。该方式适用绝大多数数据库,甚至一些不带有主键自增功能数据库。
方式二:在insert标签添加useGeneratedKeys=“true” keyProperty=“对应属性名称”。该方式适用于当前表已经设置好主键自增 ,仅限于 sqlServer以及mysql两种带有主键自增功能数据库

mybatis核心对象彼此创建关系:

SqlSessionFactoryBuilder -> SqlSessionFactory -> SqlSession ->mapper对象

SqlSessionFactoryBuilder sessionFactoryBuilder = new SqlSessionFactoryBuilder();
    	  InputStream  is=new FileInputStream(new  File("SqlMapConfig.xml"));
    	  SqlSessionFactory  factory=sessionFactoryBuilder.build(is);
    	  SqlSession  session= factory.openSession();
    	  studentMapper  smapper= session.getMapper(studentMapper.class);

SQLSessionFactory是线程安全的,建议一个项目中创建一个该对象即可。
每个sqlSession对象是单线程的,sqlSession是线程不安全的,不建议将它设置为全局变量使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值