MyBatis是一个ORM的数据操作框架

myBatis的基本配置

首先创建一个普通 java项目,引入响应jar包,然后引入mybatis的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> <!--链接properties-->
<properties resource="jdbc.properties" /> <!--设置他的别名 设为包的话别名就是包下面的类名-->
<typeAliases>
  
<package name="cn.newsoft.domain"></package>
</typeAliases> <!--配置环境们
default:默认使用的哪个环境
-->
<environments default="development"> <!--配置单个环境-->
<environment id="development">
<!--配置事务,有这两个属性
JDBC:使用JDBC的默认事务功能
MANAGED:表示没有事务
-->
<transactionManager type="JDBC"/>
<!--配置连接池-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--引入写sql语句的xml文件-->
<mappers>
<mapper resource="cn/newsoft/test/productMapper.xml"/>
</mappers>
</configuration>

配置链接数据库的properties文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///自己的数据库名
jdbc.username=自己用户名
jdbc.password=数据库密码

然后写好domain对象,然后在测试类写一个xml,这个xml中就是定义自己的sql语句,可以采用别名的方式,解决全限名的问题

 <?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"> <mapper namespace="cn.newsoft.test.productMapper">
<!--parametertype表示传入参数的类型
resulttype表示每一条数据传出时的类型
-->
          当damian中数据库字段和domain中的不对应时就可以用这个方法来统一字段
<resultMap id="prductMap" type="Product">
<result column="dir_id" property="dirId"></result> </resultMap> <!--查询一个-->
<select id="findone" parameterType="long" resultType="Product">
select * from product where id = #{id}
</select> <!--查询全部-->
<select id="findAll" resultMap="prductMap">
select * from product
</select> <!--添加操作-->
<insert id="insert" parameterType="Product">
insert into product(productName,dir_id,salePrice,supplier,brand,cutoff,costPrice)
values (#{productName},#{dirId},#{salePrice},#{supplier},#{brand},#{cutoff},#{costPrice})
</insert> <!--修改操作-->
<update id="update" parameterType="Product" >
update product set productName=#{productName},dir_id=#{dirId},salePrice=#{salePrice},
supplier=#{supplier},brand=#{brand},cutoff=#{cutoff},costPrice=#{costPrice} where id=#{id} </update>
<!--删除一个-->
<delete id="delete" parameterType="long">
delete from product where id=#{id}
</delete>
</mapper>

然后我们定义一个工具类用来获取sqlsession对象

 package cn.newsoft.util;

 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 build;
static {
try {
Reader resource = Resources.getResourceAsReader("mybatis.xml");
build = new SqlSessionFactoryBuilder().build(resource); } catch (IOException e) {
e.printStackTrace();
}
} public static SqlSession gtSession(){
SqlSession sqlSession = build.openSession();
return sqlSession; } }

dao层为

 package cn.newsoft.dao.impl;

 import cn.newsoft.dao.IproductDao;
import cn.newsoft.domain.Product;
import cn.newsoft.util.MybatisUtil;
import org.apache.ibatis.session.SqlSession; import java.util.List; public class ProductImpl implements IproductDao { @Override
public void save(Product product) {
SqlSession sqlSession = MybatisUtil.gtSession();
sqlSession.insert("cn.newsoft.test.productMapper.insert", product); }
//cn.newsoft.test.productMapper.update"为命名空间的全限定名 update执行的方法名称
@Override
public void update(Product product) {
SqlSession sqlSession = MybatisUtil.gtSession();
sqlSession.update("cn.newsoft.test.productMapper.update", product);
} @Override
public void delete(Long id) {
SqlSession sqlSession = MybatisUtil.gtSession();
sqlSession.delete("cn.newsoft.test.productMapper.delete", id);
} @Override
public Product findone(Long id) {
SqlSession sqlSession = MybatisUtil.gtSession();
Product o = (Product)sqlSession.selectOne("cn.newsoft.test.productMapper.findone",id);
return o;
} @Override
public List<Product> findAll() {
SqlSession sqlSession = MybatisUtil.gtSession();
List<Product> list = sqlSession.selectList("cn.newsoft.test.productMapper.findAll");
return list;
}
}

然后在测试类中进行测试

 package cn.newsoft.test;

 import cn.newsoft.dao.impl.ProductImpl;
import cn.newsoft.domain.Product;
import cn.newsoft.util.MybatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test; import java.util.List; public class IproductDaoTest { ProductImpl products = new ProductImpl();
@Test
public void save() { Product product = new Product();
product.setProductName("sss");
product.setSupplier("changcu");
products.save(product); } @Test
public void update() {
Product findone = products.findone(22L);
findone.setProductName("李逵");
products.update(findone);
} @Test
public void delete() {
products.delete(21L);
} @Test
public void findone() { Product findone = products.findone(1L);
System.out.println(findone);
} @Test
public void findAll() {
List<Product> all = products.findAll();
all.forEach(e ->
System.out.println(e));
}
}

这样就完成他的CRUD,

日志管理

引入jar包

 #log4j.properties(日志文件:)
# ERROR错误的日志 WARN:警告 INFO:普通信息 DEBUG:调试日志 TRACE:日志
log4j.rootLogger=ERROR, stdout
#log4j.rootLogger=NONE
#把左边包名改成你自己的包名
log4j.logger.cn.itsource=TRACE # 日志打印到控制台中
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
# 日志打印的一种格式(可以灵活地指定布局模式)
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# 日志打印的格式是什么样子的 %d:日期 %p:优先级 %c:类的全名 %m:输出的结果 %n:换行
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

MyBatis入门及CRUD的更多相关文章

  1. mybatis入门,CRUD,万能Map,模糊查询

    第一个Mybatis程序 核心配置文件mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?& ...

  2. MyBatis入门学习教程-使用MyBatis对表执行CRUD操作

    上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...

  3. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013540.html 上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybati ...

  4. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...

  5. 【转】MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    [转]MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据, ...

  6. Mybatis入门看这一篇就够了

    什么是MyBatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为 ...

  7. 【转载】 mybatis入门系列四之动态SQL

    mybatis 详解(五)------动态SQL 目录 1.动态SQL:if 语句 2.动态SQL:if+where 语句 3.动态SQL:if+set 语句 4.动态SQL:choose(when, ...

  8. MyBatis学习笔记(二)——使用MyBatis对表执行CRUD操作

    转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4262895.html 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用My ...

  9. Mybatis系列(一):Mybatis入门

    一.Mybatis是什么 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改 ...

随机推荐

  1. 好记性不如烂笔头-linux学习笔记3mysql数据库导入导出

    1 数据库文件导出 mysqldump -uroot -p123456 test > 1.sql 2数据库文件导入 mysql -uroot -p123456 test <1.sql 3 ...

  2. python greenlet 背景介绍与实现机制

    最近开始研究Python的并行开发技术,包括多线程,多进程,协程等.逐步整理了网上的一些资料,今天整理一下greenlet相关的资料. 并发处理的技术背景 并行化处理目前很受重视, 因为在很多时候,并 ...

  3. Firemonkey Android 虚拟机

    AVD,Android Virtual Device start menu>Android AVD Manager>create>start. [DCC Error] E2597 D ...

  4. Linux 清除N天前的 日期文件夹(yyyy-MM-dd)

    本人碰到模糊目录移除,小记一下 1:准确目录情况  2:模糊目录情况 先来介绍准备目录情况 本人在网上找到的demo, 目录结构(在/root/zlogs) 脚本文件b.sh #!/bin/bash ...

  5. mpg123解码相关

    int attribute_align_arg mpg123_decode(mpg123_handle *mh, const unsigned char *inmemory, size_t inmem ...

  6. c++动态链接库及静态链接库的生成与使用

    1,新建控制台工程xdltest,改属性-配置属性-常规-配置类型为 动态库.dll或静态库.lib2,打开工程后添加 dltest.h, dltest.cpp,其中.h与.cpp名字没必要一样3,编 ...

  7. MySQL 触发器示例

    简介: MySQL 触发器 这次实验是在一台 MySQL Slave 上进行的,事实证明:从库添加数据库.表.插入.删除数据等,不会导致主从失败. 一.创建实验数据库.表 mysql > cre ...

  8. 解决CentOS内网机通过Windows下架设代理来访问网络

    新分配的CentOS运行在内网环境下,无法连接Internet,为了能够使用yum部署OpenVas工具,需要在内网下一台Windows主机架设代理,作代理服务器来令虚拟机上网. 代理服务器选择了CC ...

  9. VS2015 C#6.0 中的没有实现/支持的特性

      VS2015 C#6.0 中的没有实现/支持的特性   .数组增强:赋值 维数组 Int[] numbers: numbers = {2,3,4,5}; 维数组 Int[,] numbers2; ...

  10. viewer.js--一个强大的jQuery图像查看插件

    Viewer 是一款强大的 jQuery 图像浏览插件. 主要功能: 支持选项 支持方法 支持事件 支持触摸 支持移动 支持缩放 支持旋转 支持键盘 跨浏览器支持 查看演示      立即下载 部分插 ...