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; ...
随机推荐
- ubuntu下发布asp.net core并用nginx代理之旅
asp.net core 1.0.1发布已有些日子了,怀着好奇的心情体验了把ubuntu下的asp.net core 系统运行环境:ubuntu 16.0.4 for developer 首先搭建.n ...
- arm指令bne.w改成b,即无条件跳转
近期逆向一个程序,需要把bne.w改成b,无条件跳转.由于ios逆向不像pc上,可以在od里直接改汇编指令,这篇文章给了我很大的帮助.通过memory write 修改后,验证可行后,再用ultrae ...
- WebClient 调用api
使用: /// <summary> /// 获取用户信息 /// </summary> /// <param name="code"></ ...
- Swift语言中与C/C++和Java不同的语法(五)
这一节将会提到Swift中其他的关于函数的应用,这些内容包括有: 默认参数值和可变参数值.常量参数.返回函数类型和函数嵌套: 一.默认参数值和可变参数值 对默认参数值是指在函数的声明中就已经定义了参数 ...
- @media实现网页自适应中的几个关键分辨率
不同分辨率设备或不同窗口大小下网页布局经常是不同的,一不小心就会发生错位.可以利用@media screen实现网页布局的自适应,但是怎样兼容所有主流设备就成了问题.到底分辨率是多少的时候设置呢?首先 ...
- 语音激活检测(VAD)--前向神经网络方法(Alex)
这是学习时的笔记,包含相关资料链接,有的当时没有细看,记录下来在需要的时候回顾. 有些较混乱的部分,后续会再更新. 欢迎感兴趣的小伙伴一起讨论,跪求大神指点~ VAD(ffnn神经网络)-Alex t ...
- MyEclipse 2014各种优化设置
各种优化大整合,陆续更新使用中的问题,也欢迎大家提问. 1.通用优化设置:字体,UTF-8编码格式设置: http://jingyan.baidu.com/article/b907e627d2c5da ...
- Java并发包中CopyOnWrite容器相关类简介
简介: 本文是主要介绍,并发容器CopyOnWriteArrayList和CopyOnWriteArraySet(不含重复元素的并发容器)的基本原理和使用示例. 欢迎探讨,如有错误敬请指正 如需转载, ...
- 一文看懂web服务器、应用服务器、web容器、反向代理服务器区别与联系
我们知道,不同肤色的人外貌差别很大,而双胞胎的辨识很难.有意思的是Web服务器/Web容器/Web应用程序服务器/反向代理有点像四胞胎,在网络上经常一起出现.本文将带读者对这四个相似概念如何区分. 1 ...
- Django编写RESTful API(五):添加超链接提高模型间的关联性
前言 在第四篇中,加入了用户模型,以及相关的认证和权限的功能.但是我们在使用的时候,会发现在访问http://127.0.0.1:8000/users/时看到的用户列表,不能够直接点击某个链接然后查看 ...