普通Java项目通过mybatis操作数据库

第一步:导入需要的jar包和依赖包然后进行配置
第二步:配置
MyBatis-Config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
       PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
       "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- configuration:配置(xml的一个根)-->
<configuration>
   <!--引入jdbc.propeties文件-->
   <properties resource="jdbc.properties" />
   <typeAliases>
       <package name="cn.itsource.domain"></package>
       <package name="cn.itsource.Test"></package>
   </typeAliases>
   <!--
       environments:环境(多个环境)
           default="development":多个环境中默认使用的是哪一个环境
   -->
   <environments default="development">
       <!--
            environment:某一个环境 id:就是这个环境的名称
       -->
       <environment id="development">
           <!--
               transactionManager:事务管理(ACID)
                   type="JDBC|MANAGED" jdbc:简单jdbc事务 MANAGED:啥都不做
           -->
           <transactionManager type="JDBC"/>
           <!-- 数据源(连接池) POOLED:mybatis内置的连接池 -->
           <dataSource type="POOLED">
               <!--四大金刚:驱动,地址,用户名,密码-->
               <property name="driver" value="${db.driver}"/>
               <property name="url" value="${db.url}"/>
               <property name="username" value="${db.username}"/>
               <property name="password" value="${db.password}"/>
           </dataSource>
       </environment>
   </environments>
   <mappers>
       <!--引入(找到)写SQL的XML-->
       <mapper resource="cn/itsource/domain/ProductMapper.xml"/>
   </mappers>
</configuration>

因为里面配置信息需要数据源所以我们在配置一个jdbc的配置文件

db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql:///test
db.username=root
db.password=123456

最后配置一个写sql的xml
ProductMapper.xml

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
       "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
       <mapper namespace="cn.itsource.domain.Product">
        <select id="selectOne" parameterType="long" resultType="cn.itsource.domain.Product">
       select * from Product where id=#{id}
   </select>
       </update>

这是查询一条数据的sql
测试代码:

//查询
   @Test
    public void testName() throws Exception{
       SqlSession session = null;
       //1 准备配置文件 ok
       //2 创建SqlSessionFactory
       Reader resourceAsReader = Resources.getResourceAsReader("MyBatis-Config.xml");

       SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsReader);
       //3 获取sqlSession做操作
       session = build.openSession();
       //表示调用那句sql(namespace+.+id)-拷贝,传入参数,接收得到返回值
       Product product = session.selectOne("cn.itsource.domain.ProductMapper.selectOne", 1l);
       System.err.println(product);
       //提交事物-增删改,数据库存储引擎不能是myIsam,它不支持事务
       session.commit();

       session.close();

   }

查询全部:


    <select id="selectAll" resultType="cn.itsource.domain.Product">
        select * from Product
    </select>

测试代码:

//查询全部
   @Test
   public void testselectAll() throws Exception{
       SqlSession session = null;
       //1 准备配置文件 ok
       //2 创建SqlSessionFactory
       Reader resourceAsReader = Resources.getResourceAsReader("MyBatis-Config.xml");

       SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsReader);
       //3 获取sqlSession做操作
       session = build.openSession();
       //表示调用那句sql(namespace+.+id)-拷贝,传入参数,接收得到返回值
       List<Product> product = session.selectList("Product.selectAll");
       product.forEach(e-> System.err.println(e));

       //提交事物-增删改,数据库存储引擎不能是myIsam,它不支持事务
       session.commit();
       session.close();
   }

由于其中有许多重复的代码,为了提高效率我们抽取一下:

package cn.itsource.domain;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.Reader;

public class MybatisUtil {
   private static SqlSessionFactory sqlSessionFactory;
   static {
       //创建一个工厂对象
       try {
           Reader resourceAsReader = Resources.getResourceAsReader("MyBatis-Config.xml");
           sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsReader);

       } catch (Exception e) {
           e.printStackTrace();
       }
   }

   public static SqlSession getSession(){
       return sqlSessionFactory.openSession();
   }
}

在配置文件中我们可以去一个别名,这样不用每次都写一长串
配置别名有两种方式:
第一种就是单个的配:
第二种就是扫包,不过配置扫包之后要修改ProductMapper.xml中的中的namespace属性

<typeAliases>
   	<!-- 单个配置:练习 -->
   	<typeAlias type="cn.itsource.mybatis.a_crud.Dept" alias="Dept" />
   	<!-- 包的配置:项目,添加了包之后,类名就是别名 -->
   	<package name="cn.itsource.mybatis.a_crud" />
</typeAliases>

添加:

<insert id="sava" parameterType="cn.itsource.domain.Product" useGeneratedKeys="true"
           keyColumn="id" keyProperty="id">
       insert into product
        (productName,dir_id,salePrice,supplier,brand,cutoff,costPrice)
        value (#{productName},#{dir_id},#{salePrice},#{supplier},#{brand},#{cutoff},#{costPrice})
   </insert>

测试代码:

//保存
   @Test
   public void testsave() throws Exception{
       SqlSession session = null;
       //3 获取sqlSession做操作
       session = MybatisUtil.getSession();
       //表示调用那句sql(namespace+.+id)-拷贝,传入参数,接收得到返回值
       Product product = new Product();
       product.setProductName("胡漫");
       session.insert("Product.sava",product);
       //product.forEach(e-> System.err.println(e));

       //提交事物-增删改,数据库存储引擎不能是myIsam,它不支持事务
       session.commit();

       session.close();

   }

添加多条(拼接sql)

<insert id="batchsave" parameterType="list" >
       insert into Product
       (productName,dir_id,salePrice,supplier,brand,cutoff,costPrice)values
       <foreach collection="list" item="e" separator=",">

           (#{e.productName},#{e.dir_id},#{e.salePrice},#{e.supplier},#{e.brand},#{e.cutoff},#{e.costPrice})
       </foreach>
   </insert>
//批量保存
   @Test
   public void testsaveAll() throws Exception{
       SqlSession session = null;
       //3 获取sqlSession做操作
       session = MybatisUtil.getSession();
       //表示调用那句sql(namespace+.+id)-拷贝,传入参数,接收得到返回值
       Product product = new Product();
       List list =new ArrayList();
       for (int i=0;i<10;i++){
           product.setProductName(i+"胡漫");
           list.add(product);
       }
       session.insert("Product.batchsave",list);
       //product.forEach(e-> System.err.println(e));
       //提交事物-增删改,数据库存储引擎不能是myIsam,它不支持事务
       session.commit();
       session.close();
   }

修改

<update id="update" parameterType="cn.itsource.domain.Product" >
        update product set
           productName=#{productName},
           dir_id=#{dir_id},
           salePrice=#{salePrice},
           supplier=#{supplier},
           brand=#{brand},
           cutoff=#{cutoff},
           costPrice=#{costPrice}
           where id=#{id}
   </update>

测试代码:

//修改
   @Test
   public void testupdate() throws Exception{
       SqlSession session = null;
       //3 获取sqlSession做操作
       session = MybatisUtil.getSession();
       //表示调用那句sql(namespace+.+id)-拷贝,传入参数,接收得到返回值
       Product product = new Product();
       product.setProductName("余杭");
       product.setId(2l);
       session.update("Product.batchupdate",product);
       //product.forEach(e-> System.err.println(e));
       //提交事物-增删改,数据库存储引擎不能是myIsam,它不支持事务
       session.commit();
       session.close();
   }

修改时会有一个问题就是你没有修改的字段会因为上面发出的sql而修改为空,所以我们需要判断一下有哪些需要修改的字段,哪些不需要修改,把他们区分出来。

<update id="batchupdate" parameterType="cn.itsource.domain.Product">
        update product
        <set>
            <if test="productName!=null and productName!=''">
                productName=#{productName},
            </if>
            <if test="dir_id!=null ">
                dir_id=#{dir_id},
            </if>
            <if test="salePrice!=null ">
                salePrice=#{salePrice},
            </if>
            <if test="supplier!=null ">
                supplier=#{supplier},
            </if>
            <if test="brand!=null ">
                brand=#{brand},
            </if>
            <if test="cutoff!=null ">
                cutoff=#{cutoff},
            </if>
            <if test="cutoff!=null ">
                costPrice=#{costPrice}
            </if>
        </set>
        where id=#{id}
    </update>

删除:

<delete id="delete" parameterType="cn.itsource.domain.Product">
       delete from Product where id=#{id}
   </delete>

测试代码:

//删除
   @Test
   public void testdelete() throws Exception{
       SqlSession session = null;
       //3 获取sqlSession做操作
       session = MybatisUtil.getSession();
       //表示调用那句sql(namespace+.+id)-拷贝,传入参数,接收得到返回值
       session.delete("Product.delete",22l);
       //product.forEach(e-> System.err.println(e));
       //提交事物-增删改,数据库存储引擎不能是myIsam,它不支持事务
       session.commit();
       session.close();
   }

批量删除:

<delete id="batchdelete" parameterType="list">
       delete from Product where id in
       <foreach collection="list" item="item" separator="," open="(" close=")" index="index">
           #{item}
       </foreach>
   </delete>

测试代码:

//删除
   @Test
   public void testdelete2() throws Exception{
       SqlSession session = null;
       //3 获取sqlSession做操作
       session = MybatisUtil.getSession();
       //表示调用那句sql(namespace+.+id)-拷贝,传入参数,接收得到返回值
       session.delete("Product.batchdelete",Arrays.asList(30, 31, 32));
       //product.forEach(e-> System.err.println(e));
       //提交事物-增删改,数据库存储引擎不能是myIsam,它不支持事务
       session.commit();
       session.close();
   }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值