一、Mybatis本地dtd环境配置、
1、将Mybatis的jar包、数据库的jar包、log4j的jar包添加到项目路径中
2、先将mybatis-3-config.dtd放入src目录下,然后在src目录下配Mybatis.xml文件
Mybatis.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "//UNKNOWN/" "mybatis-3-config.dtd">
<configuration>
<environments default="default">
<environment id="default">
<!-- 使用jdbc的事务 -->
<transactionManager type="JDBC" />
<!-- 采用连接池 -->
<dataSource type="POOLED">
<!-- 数据连接参数 -->
<property name="url" value="jdbc:oracle:thin:@localhost:1521:accp"/>
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="username" value="scott"/>
<property name="password" value="tiger"/>
</dataSource>
</environment>
</environments>
<!-- 实体类映射文件集合 -->
<mappers>
<!-- 映射Emp.xml -->
<mapper resource="com/accp/entity/Emp.xml"/>
</mappers>
</configuration>
3、构建MybatisUtil工具类
/**
* mybatis工具
* @author Administrator
*
*/
public class MyBatisUtil {
//保存会话集合
private static final ThreadLocal<SqlSession> tl = new ThreadLocal<SqlSession>();
private static SqlSessionFactory factory;
static{
try {
//读取文件流
Reader reader = Resources.getResourceAsReader("mybatis.xml");
//解析XML返回工厂
SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();
factory = factoryBuilder.build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取会话
* @return
*/
public static SqlSession getSession(){
SqlSession session = tl.get();
if(session == null){
session = factory.openSession();
tl.set(session);
}
return session;
}
/**
* 关闭会话
*/
public static void closeSession(){
SqlSession session = tl.get();
if(session != null){
session.close();
tl.set(null);
}
}
}
4、新建实体类Emp,然后放入mybatis-3-mapper.dtd,配置Emp.xml,最后将Emp.xml映射到Mybatis.xml中
实体Emp.java,省略构造,getter,setter,以及重写toString()
package com.accp.entity;
/**
* 员工实体类
*/
public class Emp {
private Integer empno; //员工编号
private String ename; //姓名
private String job; //工种
private Integer mgr; //经理
private Float comm; //年终福利
private Float sal; //薪水
private Integer deptno; //部门编号
private Date hiredate; //入职日期
}
Emp.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "//UNKNOWN/" "mybatis-3-mapper.dtd">
<!-- 需要指定namespace,可以自定义为包名加类名 -->
<mapper namespace="com.accp.entity.Emp">
<!-- id用于标识select语句,resultType指定返回结果类型 需为完整的包名+类名 -->
<select id="selectEmp" resultType="com.accp.entity.Emp">
select * from emp
</select>
</mapper>
Mybatis.xml
<!-- 实体类映射文件集合 -->
<mappers>
<!-- 映射Emp.xml -->
<mapper resource="com/accp/entity/Emp.xml"/>
</mappers>
注意:如果数据库表中的列与实体类中的属性不一样还需配置
<!-- 设置resultMAP 用于实体类属性名和表中列名不一样 -->
<!-- type:实体类 id:自定义的名称,用于resultType -->
<resultMap type="com.accp.entity.Emp" id="empno_ename_Map">
<!-- property:实体类中的属性 column:表中的列 -->
<result property="empno" column="empno"/>
<result property="ename" column="ename"/>
<result property="job" column="job"/>
<result property="mgr" column="mgr"/>
<result property="hiredate" column="hiredate"/>
<result property="sal" column="sal"/>
<result property="comm" column="comm"/>
<result property="deptno" column="deptno"/>
</resultMap>
相应的select语句返回类型需由resultMap设置,而不是resultType
<select id="selectEmpResultMap" parameterType="com.accp.entity.Emp" resultMap="empno_ename_Map">
5、最后不要忘了把mybatis-3-config.dtd和mybatis-3-mapper.dtd放入项目根目录下
二、Mybatis基础增、删、改、查
1、查询所有Emp
public class Test1 {
/**
* 使用Mybatis查询所有Emp
*/
public static void main(String[] args) {
//声明会话
SqlSession ses = null;
try{
//获得会话
ses = MyBatisUtil.getSession();
//获得Emp集合
List<Emp> list = ses.selectList("selectEmp");
//遍历集合
for(Emp e : list){
System.out.println(e);
}
}catch (Exception e) {
e.printStackTrace();
}finally{
//关闭会话
if(ses != null){
MyBatisUtil.closeSession();
}
}
}
}
Emp.xml:
<!-- id用于标识select语句,resultType指定返回结果类型 需为完整的包名+类名 -->
<select id="selectEmp" resultType="com.accp.entity.Emp">
select * from emp
</select>
2、查询单个对象,直接传参
public class Test2 {
/**
* 查询单个对象,直接传值
*/
public static void main(String[] args) {
//声明会话
SqlSession ses = null;
try {
//获得会话
ses = MyBatisUtil.getSession();
//查询单个Emp
Emp emp = ses.selectOne("selectOne",7369);
System.out.println(emp);
} catch (Exception e) {
e.printStackTrace();
}finally{
if(ses != null){
MyBatisUtil.closeSession();
}
}
}
}
Emp.xml:
<!-- parameterType设置参数类型,int是Java的类型 -->
<select id="selectOne" resultType="com.accp.entity.Emp" parameterType="int">
<!-- #{ }的内容可以自定义 -->
select * from emp where empno = #{id}
</select>
3、查询多个对象,使用对象传参
public class Test3 {
/**
* 查询单个对象使用selectOne 查询多个对象使用selectList
* 使用对象传参
*/
public static void main(String[] args) {
SqlSession ses = null;
try {
ses = MyBatisUtil.getSession();
Emp emp = new Emp(null, "L");
List<Emp> list = ses.selectList("selectEmpByObj",emp);
for(Emp e : list){
System.out.println(e);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
MyBatisUtil.closeSession();
}
}
}
Emp.xml:
<!-- 使用对象传参 -->
<select id="selectEmpByObj" resultType="com.accp.entity.Emp" parameterType="com.accp.entity.Emp">
select * from emp
<where>
<if test="empno > 0">
empno = #{empno}
</if>
<!-- test条件中and不能改成&& -->
<!-- 如果前面条件不成立 sql中and会自动去掉-->
<if test="ename != null and ename != ''">
<!-- #会根据数据加引号'',$直接填值 -->
and ename like '%${ename}%'
</if>
</where>
</select>
4、查询多个对象,使用Map传参
/**
* 使用Map传参
*/
public static void main(String[] args) {
//声明会话
SqlSession ses = null;
try {
//获得会话
ses = MyBatisUtil.getSession();
//实例化map集合,并添加元素作为查询的条件
Map<String,Object> map = new HashMap<String,Object>();
//map.put("empno", 7369);
map.put("ename", "L");
//获得Emp集合,使用Map集合作为参数
List<Emp> list = ses.selectList("selectEmpByMap",map);
for(Emp e : list){
System.out.println(e);
}
} catch (Exception e) {
e.printStackTrace();
}
}
Emp.xml:
<!-- 使用Map集合传参 -->
<select id="selectEmpByMap" resultType="com.accp.entity.Emp" parameterType="map">
select * from emp
<where>
<if test="empno > 0">
empno = #{empno}
</if>
<!-- test条件中and不能改成&& -->
<!-- 如果前面条件不成立 sql中and会自动去掉-->
<if test="ename != null and ename != ''">
<!-- #会根据数据加'',$直接填值 -->
and ename like '%${ename}%'
</if>
</where>
</select>
5、查询部分列,返回仍为对象
public class Test5 {
/**
* 查询部分列
*/
public static void main(String[] args) {
//声明会话
SqlSession ses = null;
try {
//获得会话
ses = MyBatisUtil.getSession();
//实例化Emp,作为查询参数
Emp emp = new Emp();
//emp.setEmpno(7369);
emp.setEname("L");
//获得Emp集合,返回值为List<Emp>,非查询列为null
List<Emp> list = ses.selectList("selectEmpResultMap", emp);
//输出对应列
for(Emp e : list){
System.out.println(e.getEname() + "\t" + e.getSal());
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//关闭会话
if(ses != null){
MyBatisUtil.closeSession();
}
}
}
}
Emp.xml:
<select id="selectEmpResultMap" parameterType="com.accp.entity.Emp" resultMap="empno_ename_Map">
select ename,sal from emp
<where>
<if test="empno > 0">
empno = #{empno}
</if>
<!-- test条件中and不能改成&& -->
<!-- sql语句前要加and -->
<!-- 如果前面条件不成立 sql中and会自动去掉-->
<if test="ename != null and ename != ''">
<!-- #会根据数据加'',$直接填值 -->
and ename like '%${ename}%'
</if>
</where>
</select>
6、新增
public class Test6 {
/**
* Mybatis新增
*/
public static void main(String[] args) {
//声明会话
SqlSession ses = null;
try {
//获得会话
ses = MyBatisUtil.getSession();
//实例化Emp对象并赋值
Emp emp = new Emp();
emp.setEmpno(1010);
emp.setEname("张三");
emp.setJob("testJob");
emp.setMgr(7369);
emp.setHiredate(new Date());
emp.setSal(2000f);
emp.setComm(500f);
emp.setDeptno(10);
//插入数据返回受影响行数
int count = ses.insert("insertEmp",emp);
System.out.println(count);
//提交会话
ses.commit();
} catch (Exception e) {
e.printStackTrace();
//回滚会话
ses.rollback();
}finally{
//关闭会话
if(ses != null){
MyBatisUtil.closeSession();
}
}
}
}
Emp.xml:
<!-- sql结尾不能有分号; -->
<insert id="insertEmp" parameterType="com.accp.entity.Emp">
insert into emp values(#{empno},#{ename},#{job},#{mgr},#{hiredate},#{sal},#{comm},#{deptno})
</insert>
7、修改
public class Test7 {
/**
* Mybatis修改
*/
public static void main(String[] args) {
//声明会话
SqlSession ses = null;
try {
//获得会话
ses = MyBatisUtil.getSession();
//实例化Emp对象并赋值要修改的属性
Emp emp = new Emp();
emp.setEmpno(1010);
emp.setEname("李四");
//插入数据返回受影响行数
int count = ses.update("updateEmp",emp);
System.out.println(count);
//提交会话
ses.commit();
} catch (Exception e) {
e.printStackTrace();
//回滚会话
ses.rollback();
}finally{
//关闭会话
if(ses != null){
MyBatisUtil.closeSession();
}
}
}
}
Emp.xml:
<update id="updateEmp" parameterType="com.accp.entity.Emp">
update emp
<set>
<!-- 后面要加逗号, -->
<if test="ename != null and ename != ''">
ename = #{ename},
</if>
</set>
where empno = #{empno}
</update>
8、删除
public class Test8 {
/**
* Mybatis删除
*/
public static void main(String[] args) {
//声明会话
SqlSession ses = null;
try {
//获得会话
ses = MyBatisUtil.getSession();
//实例化Emp对象并赋值要修改的empno
Emp emp = new Emp();
emp.setEmpno(1010);
//插入数据返回受影响行数
int count = ses.delete("deleteEmp",emp);
System.out.println(count);
//提交会话
ses.commit();
} catch (Exception e) {
e.printStackTrace();
//回滚会话
ses.rollback();
}finally{
//关闭会话
if(ses != null){
MyBatisUtil.closeSession();
}
}
}
}
Emp.xml:
<!-- 根据empno删除员工 -->
<delete id="deleteEmp" parameterType="com.accp.entity.Emp">
delete emp where empno = #{empno}
</delete>
相关推荐
以下将详细讲解如何配置Mybatis的DTD环境: 首先,打开Eclipse或类似的IDE,开始进行DTD的环境配置。在Eclipse中,可以通过以下步骤添加DTD文件: 1. 点击菜单栏上的“Window”选项,然后选择“Perferences”,这...
6. **本地DTD文件**: 另一种方法是将DTD文件下载到本地,并在DTD引用中使用本地路径,这样即使没有网络也可以进行验证。例如,将`mybatis-3-config.dtd`放入项目的类路径下,然后更改DTD声明为: ```xml <!...
你可以将这个压缩包中的`mybatis-3-mapper.dtd`文件复制到本地,并在MyBatis的配置文件中指定本地DTD文件的位置,这样即使没有网络,MyBatis也能正确解析XML映射文件。 为了做到这一点,你需要在MyBatis的配置文件...
然而,在开发环境中,如果没有网络连接或者远程获取速度较慢,这个压缩包就显得非常实用,因为它允许开发者本地快速访问并验证配置文件的正确性。 描述中提到,当开发环境无网络或网络状况不佳时,这个压缩包可以...
同时,为了性能考虑,可以使用缓存配置,MyBatis提供了本地缓存和二级缓存机制。 7. **集成与扩展** MyBatis可以轻松地与Spring框架集成,通过Spring的依赖注入管理数据源和事务,实现更高级的事务策略。此外,...
MyBatis是一个流行的Java持久层框架,它简化了...在本地开发中,下载并导入这些DTD文件有助于确保XML配置文件的正确解析。理解并熟练使用这两个配置文件是掌握MyBatis的关键,能够帮助提高开发效率和代码的可维护性。
-- 其他增删改查操作 --> ``` 在NetBeans中,你需要将这些配置文件添加到项目的类路径下,然后创建对应的Java接口(如UserMapper.java),并在其中定义对应的方法。Mybatis会自动将XML中的SQL语句与接口方法关联...
在开始搭建MyBatis环境前,确保已安装以下基础软件: - Java Development Kit (JDK):MyBatis是用Java编写的,所以需要JDK 8或更高版本。 - Integrated Development Environment (IDE):如IntelliJ IDEA、Eclipse...
MyBatis 是一款优秀的持久层...综上所述,搭建 MyBatis 基本环境并进行优化,主要是配置 MyBatis 相关文件,设置别名简化类名引用,以及编写高效的 SQL 查询。通过这些步骤,可以有效地提升项目的开发效率和运行性能。
本教程将围绕"Mybatis基础CRUD"这一主题,深入探讨MyBatis如何实现增删改查的基本操作。 首先,我们需要了解MyBatis的基本架构。MyBatis的核心组件包括SqlSessionFactory、SqlSession和Mapper接口。...
现在,你已经有了基于指定表的实体类、Mapper接口和Mapper XML文件,可以方便地进行单表的增删改查操作。 在实际开发中,你可能需要为多个表配置MBG,只需在`<context>`标签下添加多个`<table>`标签即可。此外,MBG...
在项目中,通过添加Mybatis的Maven依赖或在Gradle构建文件中引入相应库,完成Mybatis的环境配置。 2. **Mybatis配置文件(mybatis-config.xml)** 这是Mybatis的全局配置文件,其中包含了数据库连接信息、类型别名...
MyBatis的配置文件通常命名为`mybatis-config.xml`,它包含了MyBatis的全局配置,如数据库连接信息、事务管理器、环境设置等。在这个案例中,你可能会看到类似这样的配置: ```xml ``...
总结来说,MyBatis-3.2.7 文档详细介绍了如何从基础开始进行 MyBatis 开发,包括 XML 配置文件的编写、SqlSessionFactory 的创建、数据源和事务管理的配置,以及映射文件的使用。通过这些知识,开发者可以有效地将 ...
MyBatis 提供了两种级别的缓存机制:一级缓存(本地会话缓存)和二级缓存(全局会话缓存)。合理利用缓存可以显著提高应用程序性能。 **配置缓存**: ```xml ``` ##### 4.2 插件扩展 MyBatis 允许通过插件机制...
总结,MyBatis Generator 1.3.1是Eclipse环境下提升开发效率的重要工具,通过合理的配置可以实现对数据库表的反向工程,自动生成与数据库交互的Java代码。了解和熟练掌握MBG的使用,能显著提高开发效率,让开发者更...
这个压缩包包含的资源是针对MyBatis 3.2版本的,提供了完整的开发环境支持,包括JAR包、Javadoc文档、Java源代码以及配置文件。 1. **JAR包**:mybatis-3.2.0.jar 是MyBatis的核心库,包含了MyBatis的所有核心类和...
在这个配置中,我们定义了一个名为"MySQL"的上下文,连接到本地的MySQL数据库,并指定了要处理的表`example_table`。 4. **执行生成** 创建好配置文件后,可以通过Java API或命令行来运行MBG。例如,使用Java API...
在项目中创建一个名为 `mybatis-config.xml` 的配置文件,配置数据库连接信息、映射文件位置等: ```xml <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" ...
IntelliJ IDEA 配置外部 DTD 文件的方法 在软件开发中,IDEA 是一种非常流行的集成开发环境,它提供了许多强大的功能,例如智能代码助手、代码自动提示、重构、J2EE 支持、版本工具(git、svn 等)、JUnit、CVS ...