mybatis-java代码调用部分
只需要加入 mybatis-2.2.jar 和数据库驱动包即可
java代码实现的步骤
package com.yangwei.shop.test;
import java.io.IOException;
import java.io.InputStream;
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 com.yangwei.shop.entity.User;
import com.yangwei.shop.util.MyBatisUtil;
public class TestMybatis {
/**
* @param args
*/
public static void main(String[] args) {
try {
//1,创建主配置文件输入流(mybatis-config.xml)
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//2,创建SQLSessionFactory
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
//3,创建SqlSession
SqlSession session = factory.openSession();
//4,调用mapper文件插入数据(mapper文件必须加入到mybatis-config.xml中)
User user = new User();
user.setUsername("zhangsan");
user.setPasswd("123456");
user.setNickname("shengqishi");
user.setType(2);
//参数1: mapper的namespace+具体方法的id
session.insert("com.yangwei.shop.entity.User.add",user);
session.commit();
session.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Mybatis工具类
package com.yangwei.shop.util;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtil {
private static SqlSessionFactory factory;
static {
try {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
factory = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession createSession() {
return factory.openSession();
}
public static void closeSession(SqlSession session) {
if(session!=null) session.close();
}
}
有了工具类之后,操作变的简单
public static void testAdd(){
SqlSession session=null;
try {
User user = new User();
user.setUsername("zhangsan");
user.setPasswd("123456");
user.setNickname("shengqishi");
user.setType(2);
session = MyBatisUtil.createSession();
//此时,mapper文件的namespace与类的全路径需一致
session.insert(User.class.getName()+".add", user);
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}finally{
MyBatisUtil.closeSession(session);
}
}
public static void testLoad(){
SqlSession session=null;
try {
session = MyBatisUtil.createSession();
//此时,mapper文件的namespace与类的全路径需一致
User u=session.selectOne(User.class.getName()+".load", 1);
System.out.println(u.getNickname());
} finally{
MyBatisUtil.closeSession(session);
}
}
我们发现,前面的session.insert(),session.selectOne()等等,第一个参数是一个很麻烦的字符串,为了改善这个,有了基于mapper的方式
步骤1,需要写为每一个写mapper接口,例如:package com.yangwei.shop.mapper;
import com.yangwei.shop.entity.User;
import java.util.List;
public interface UserMapper {
//这个接口中的方法,对应于mapper.xml中的标签
public void add(User user);
public void update(User user);
public void delete(int id);
public User load(int id);
public List<User> list();
}步骤二: mapper.xml的namespace必须是这个接口的全路径,如
<mapper namespace="com.yangwei.shop.mapper.UserMapper">
步骤三:java代码调用的时候,按照如下写法:
UserMapper mapper = session.getMapper(UserMapper.class);mapper.add(user);
两种方式都要知道,建议使用第一种,虽然是字符串...
下面两种方式 : "获取所有User的调用"
public static void testList(){
SqlSession session=null;
try {
session = MyBatisUtil.createSession();
//注意这样使用的时候,mapper.xml的namespace必须是实体类全路径
List<User> users=session.selectList(User.class.getName()+".list", null);
System.out.println(users.size());
} finally{
MyBatisUtil.closeSession(session);
}
}
public static void testListByMapper(){
SqlSession session=null;
try {
session = MyBatisUtil.createSession();
//注意这样使用的时候,mapper.xml的namespace必须是Mapper接口全路径
List<User> users=session.getMapper(UserMapper.class).list();
System.out.println(users.size());
} finally{
MyBatisUtil.closeSession(session);
}
}
最后最简洁的方式,不使用mapper.xml这样的配置文件,采用注解的形式
package com.yangwei.shop.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.yangwei.shop.entity.User;
//这个接口中的方法,对应于mapper.xml中的标签
public interface UserMapper {
@Insert("insert into t_user(username,password,nickname,type) values(#{username},#{password},#{nickname},#{type})")
public void add(User user);
@Update("update t_user set password=#{password},nickname=#{nickname},type=#{type} where id=#{id}")
public void update(User user);
@Delete("delete from t_user where id=#{id}")
public void delete(int id);
@Select("select * from t_user where id=#{id}")
public User load(int id);
@Select("select * from t_user")
public List<User> list();
}
此时在主配置文件mybatis-config.xml中引入的是这个接口,使用class属性<mapper class="com.yangwei.shop.mapper.UserMapper" />
最佳实践(孔老师建议):1,创建相应的MybatisUtil工具类,完成对session的获取;2,不使用annotation完成对sql映射;3,建议使用基于sql访问而不要使用基于Mapper
mybatis-java代码调用部分的更多相关文章
- Java代码调用服务器上的Shell脚本
Java代码调用服务器上的Shell脚本 这里主要是因为我们报表平台有用到用户手工录入的数据作为结果数据且需要纳入saiku去展示 如我们所知,saiku不会自动刷新,所以需要在数据更新接口中调用服务 ...
- Java代码调用Oracle的存储过程,存储函数和包
Java代码调用存储过程和存储函数要使用CallableStatement接口 查看API文档: 上代码: java代码调用如下的存储过程和函数: 查询某个员工的姓名 月薪 职位 create or ...
- java代码调用数据库存储过程
由于前边有写java代码调用数据库,感觉应该把java调用存储过程也写一下,所以笔者补充该篇! package testSpring; import java.sql.CallableStatemen ...
- Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件
本文通过Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件,代码如下: import java.io.File; import java.io.IOException; import ...
- 存储过程之七—java代码调用
一.简介 jdbc调用存储过程与调用一般的sql语句有些差别.jdbc调用一般的sql语句的时候,返回的是结果集,或是sql语句后是否执行成功的标记量.而存储过程返回的可以是结果集,输出参数.返回状态 ...
- Jmeter自定义编写Java代码调用socket通信
一.前言 最近需要测试一款手机游戏的性能,找不到啥录制脚本的工具,然后,另外想办法.性能测试实际上就是对服务器的承载能力的测试,和各种类型的手机客户端没有啥多大关系,手机再好,服务器负载不了,也不能够 ...
- 用java代码调用shell脚本执行sqoop将hive表中数据导出到mysql
1:创建shell脚本 touch sqoop_options.sh chmod 777 sqoop_options.sh 编辑文件 特地将执行map的个数设置为变量 测试 可以java代码传参数 ...
- java代码调用oracle存储过程
一.简介 与调用mysql存储过程类型过程都是如下 1.创建连接 Connection conn = DriverManager.getConnection(url, user, password); ...
- java代码调用使用cxf搭建的webService服务传递对象
前边成功创建好一个cxf的webServcie服务,并带了一个无参数的方法.现在进一步尝试了使用带参数的方法,分别测了用String为参数和用自定义的对象为参数. 其中,使用String为参数时和不带 ...
- 02_JNI中Java代码调用C代码,Android中使用log库打印日志,javah命令的使用,Android.mk文件的编写,交叉编译
1 编写以下案例(下面的三个按钮都调用了底层的C语言): 项目案例的代码结构如下: 2 编写DataProvider的代码: package com.example.ndkpassdata; ...
随机推荐
- 谈谈Golang中goroutine的调度问题
goroutine的调度问题,同样也是我之前面试的问题,不过这个问题我当时并不是很清楚,回来以后立马查阅资料,现整理出来备忘. 有一些预备知识需要说明,就是操作系统中的线程.操作系统中的线程分为两种: ...
- 非极大值抑制(Non-Maximum Suppression,NMS)
概述 非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索.这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二 ...
- 【Hadoop】集群配置要点
1.SSH免密码登录 1.1生成公钥,一直enter,直到完成 dream361@master:~$ ssh-keygen -t rsa 1.2传送公钥 dream361@master:~$ scp ...
- jQuery表单事件
1.focus() 获得焦点,适用于所有元素2.blur() 失去焦点,适用于所有元素3.change() 当内容改变时触发 只适用于 input textarea select4.select() ...
- 微信原图泄露的只能是 Exif ,你的隐私不在这!!!
版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有. 每周会统一更新到这里,如果喜欢,可关注公众号获取最新文章. 未经允许,不得转载. 序 最近很多公众号都推送了关 ...
- lsnrctl start 命令未找到 数据库连接报错“ORA-12541: TNS: 无监听程序”
1. lsnrctl start 命令未找到 或者bash:lsnrctl:command not found. su - oralce 切换用户的时候,中间要有-,而且-的两边有空格, ...
- C / C++ 运行环境搭建教程
C / C++ 运行环境搭建教程 一.实验环境 本机操作系统:Windows 7 64位 虚拟机:VMware Workstation 12 pro 虚拟机操作系统:Linux CentOS 7 二. ...
- java创建泛型数组
java中创建泛型数组并不是不可能,创建泛型数组通过反射,给构造函数传递两个参数,一个类型标记,一个数组大小.' 简单Demo如下: import java.lang.reflect.Array; / ...
- 10分钟搞懂Tensorflow 逻辑回归实现手写识别
1. Tensorflow 逻辑回归实现手写识别 1.1. 逻辑回归原理 1.1.1. 逻辑回归 1.1.2. 损失函数 1.2. 实例:手写识别系统 1.1. 逻辑回归原理 1.1.1. 逻辑回归 ...
- mysql 批量插入优化之rewriteBatchedStatements
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt397 介绍MySQL Jdbc驱动的rewriteBatchedStatem ...