`
失落丶神话
  • 浏览: 7166 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Mybatis本地dtd环境配置及基础增、删、改、查

阅读更多

一、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环境

    以下将详细讲解如何配置Mybatis的DTD环境: 首先,打开Eclipse或类似的IDE,开始进行DTD的环境配置。在Eclipse中,可以通过以下步骤添加DTD文件: 1. 点击菜单栏上的“Window”选项,然后选择“Perferences”,这...

    mybatis-dtd.rar

    6. **本地DTD文件**: 另一种方法是将DTD文件下载到本地,并在DTD引用中使用本地路径,这样即使没有网络也可以进行验证。例如,将`mybatis-3-config.dtd`放入项目的类路径下,然后更改DTD声明为: ```xml &lt;!...

    mybatis-3-mapper.dtd.zip

    你可以将这个压缩包中的`mybatis-3-mapper.dtd`文件复制到本地,并在MyBatis的配置文件中指定本地DTD文件的位置,这样即使没有网络,MyBatis也能正确解析XML映射文件。 为了做到这一点,你需要在MyBatis的配置文件...

    mybatis-3-config.dtd.zip

    然而,在开发环境中,如果没有网络连接或者远程获取速度较慢,这个压缩包就显得非常实用,因为它允许开发者本地快速访问并验证配置文件的正确性。 描述中提到,当开发环境无网络或网络状况不佳时,这个压缩包可以...

    mybatis的两个Dtd文件,config.dtd mapper.dtd

    同时,为了性能考虑,可以使用缓存配置,MyBatis提供了本地缓存和二级缓存机制。 7. **集成与扩展** MyBatis可以轻松地与Spring框架集成,通过Spring的依赖注入管理数据源和事务,实现更高级的事务策略。此外,...

    mybatis的config和mapper-dtd

    MyBatis是一个流行的Java持久层框架,它简化了...在本地开发中,下载并导入这些DTD文件有助于确保XML配置文件的正确解析。理解并熟练使用这两个配置文件是掌握MyBatis的关键,能够帮助提高开发效率和代码的可维护性。

    Mybatis简单配置(NetBeans版本)

    -- 其他增删改查操作 --&gt; ``` 在NetBeans中,你需要将这些配置文件添加到项目的类路径下,然后创建对应的Java接口(如UserMapper.java),并在其中定义对应的方法。Mybatis会自动将XML中的SQL语句与接口方法关联...

    MyBatis环境搭建详细过程

    在开始搭建MyBatis环境前,确保已安装以下基础软件: - Java Development Kit (JDK):MyBatis是用Java编写的,所以需要JDK 8或更高版本。 - Integrated Development Environment (IDE):如IntelliJ IDEA、Eclipse...

    针对mybatis3 基本环境搭建优化(一) .

    MyBatis 是一款优秀的持久层...综上所述,搭建 MyBatis 基本环境并进行优化,主要是配置 MyBatis 相关文件,设置别名简化类名引用,以及编写高效的 SQL 查询。通过这些步骤,可以有效地提升项目的开发效率和运行性能。

    mybatis基础CRUD

    本教程将围绕"Mybatis基础CRUD"这一主题,深入探讨MyBatis如何实现增删改查的基本操作。 首先,我们需要了解MyBatis的基本架构。MyBatis的核心组件包括SqlSessionFactory、SqlSession和Mapper接口。...

    MyBatis 代码生成器配置详解( IDEA ).docx

    现在,你已经有了基于指定表的实体类、Mapper接口和Mapper XML文件,可以方便地进行单表的增删改查操作。 在实际开发中,你可能需要为多个表配置MBG,只需在`&lt;context&gt;`标签下添加多个`&lt;table&gt;`标签即可。此外,MBG...

    Mybatis 入门小例子

    在项目中,通过添加Mybatis的Maven依赖或在Gradle构建文件中引入相应库,完成Mybatis的环境配置。 2. **Mybatis配置文件(mybatis-config.xml)** 这是Mybatis的全局配置文件,其中包含了数据库连接信息、类型别名...

    MyBatis案例

    MyBatis的配置文件通常命名为`mybatis-config.xml`,它包含了MyBatis的全局配置,如数据库连接信息、事务管理器、环境设置等。在这个案例中,你可能会看到类似这样的配置: ```xml ``...

    详细的mybatis-3.2.7文档

    总结来说,MyBatis-3.2.7 文档详细介绍了如何从基础开始进行 MyBatis 开发,包括 XML 配置文件的编写、SqlSessionFactory 的创建、数据源和事务管理的配置,以及映射文件的使用。通过这些知识,开发者可以有效地将 ...

    MyBatis3.2.6

    MyBatis 提供了两种级别的缓存机制:一级缓存(本地会话缓存)和二级缓存(全局会话缓存)。合理利用缓存可以显著提高应用程序性能。 **配置缓存**: ```xml ``` ##### 4.2 插件扩展 MyBatis 允许通过插件机制...

    MyBatis_Generator_1.3.1 eclipse 整合mybatis 反向生成代码 工具

    总结,MyBatis Generator 1.3.1是Eclipse环境下提升开发效率的重要工具,通过合理的配置可以实现对数据库表的反向工程,自动生成与数据库交互的Java代码。了解和熟练掌握MBG的使用,能显著提高开发效率,让开发者更...

    mybatis3.2

    这个压缩包包含的资源是针对MyBatis 3.2版本的,提供了完整的开发环境支持,包括JAR包、Javadoc文档、Java源代码以及配置文件。 1. **JAR包**:mybatis-3.2.0.jar 是MyBatis的核心库,包含了MyBatis的所有核心类和...

    mybatis-generator-core-1.3.2.jar包及自动生成样例以及使用方法

    在这个配置中,我们定义了一个名为"MySQL"的上下文,连接到本地的MySQL数据库,并指定了要处理的表`example_table`。 4. **执行生成** 创建好配置文件后,可以通过Java API或命令行来运行MBG。例如,使用Java API...

    mybatis入门案例

    在项目中创建一个名为 `mybatis-config.xml` 的配置文件,配置数据库连接信息、映射文件位置等: ```xml &lt;!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" ...

    intellij idea配置外部dtd文件的方法

    IntelliJ IDEA 配置外部 DTD 文件的方法 在软件开发中,IDEA 是一种非常流行的集成开发环境,它提供了许多强大的功能,例如智能代码助手、代码自动提示、重构、J2EE 支持、版本工具(git、svn 等)、JUnit、CVS ...

Global site tag (gtag.js) - Google Analytics