mybatis---demo1--(单表增删改查)----bai

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis---demo1--(单表增删改查)----bai相关的知识,希望对你有一定的参考价值。

实体类:

package com.etc.entity;

public class News 
{
	private int id;
	private String title;
	private String content;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	@Override
	public String toString() {
		return "News [content=" + content + ", id=" + id + ", title=" + title
				+ "]";
	}	
}
========================================================================
dao类:

package com.etc.dao;

import java.util.List;

import com.etc.entity.News;

public interface NewsDao 
{
	List<News> findAll();
	News findById(int id);//精确查询
	void add(News news);//添加
	void update(News news);//修改
	void delete(Integer id);//删除
}
==========================================================================
工具类:

package com.etc.utils;

import java.io.InputStream;
import java.sql.Connection;

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 org.apache.log4j.lf5.util.Resource;

//实现获取、释放mybatis数据库连接的工具类
public class MyBatisSessionFactory {
	//定义常量
	private static String CONFIG_FILE_LOCATION="mybatis-config.xml";
	
	//考虑到该工具类允许被多线程执行。因为封装1个线程池,让每个线程从线程池中获取1个连接。让1个线程对应
	//1条数据库连接,这样更安全
	//ThreadLocal的作用:让"线程"绑定"资源",这样就不会出现多个线程同享资源的情况。更安全。牺牲内存,换取”安全“
	private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
	
	private static InputStream is; //用于读取配置文件的流对象
	
	private static SqlSessionFactory fac;//用于管理多个连接的工厂。一个工厂对应1个数据库。
	
	//在该类的静态段中加载配置文件,这样可以确保只执行1次。
	static
	{
		try {
			is = Resources.getResourceAsStream(CONFIG_FILE_LOCATION);//读取配置文件
			fac = new SqlSessionFactoryBuilder().build(is);//通过配置文件创建1个连接工厂
		} catch (Exception e) 
		{
			e.printStackTrace();
		}
		
	}
	//获取1条连接
	public static SqlSession getSession()
	{
		SqlSession s  = threadLocal.get(); //找线程池要1条连接
		if(s==null) //第1次时,拿不到,则由工厂获取1条连接并放入线程池
		{
			s = fac.openSession();//由工厂获取1条连接并放入线程池
			threadLocal.set(s);//放入线程池
		}
		return s;
	}
	
	//关闭连接
	public static void closeSession()
	{
		SqlSession s  = threadLocal.get();//找线程池要本线程对应的连接
		threadLocal.set(null);//将该连接从线程池中清除
		if(s!=null)
			s.close();//物理关闭连接
	}
}
=======================================================================
mybatis-config.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>
<typeAliases>
	<typeAlias type="com.etc.entity.News" alias="News"/>
</typeAliases>
<environments default="development">
<environment id="development">
   <transactionManager type="JDBC"/>
   <dataSource type="POOLED">	  
  	<property name="url" value="jdbc:mysql://127.0.0.1/java?characterEncoding=utf-8"/>
  	<property name="username" value="root"/>
  	<property name="password" value="root"/>
  	<property name="driver" value="com.mysql.jdbc.Driver"/>
  </dataSource>
</environment>
</environments>
<mappers>
  <mapper resource="com/etc/mapper/News-mapper.xml"/>
</mappers>
</configuration>
========================================================================
News-mapper.xml     配置:

<?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">
<!-- 既是实体的映射文件。类似orm。同时又是dao的实现代码 -->
<mapper namespace="com.etc.dao.NewsDao">
<!-- 配置实体和数据表的映射关系 -->
<resultMap type="News" id="NewsResult">
	<id column="id" property="id"/>  <!-- 主键 -->
	<result column="title" property="title"/>
	<result column="content" property="content"/>
</resultMap>
 <!-- 查询全部,实现findAdd方法 -->
<select id="findAll" resultMap="NewsResult">
	select * from news	
</select>
<!-- 精确查询 ,实现findbyid的方法-->
<select id="findById" parameterType="java.lang.Integer" resultType="News">
	select * from news where id=#{id}
</select>
<!-- 添加 -->
<insert id="add" parameterType="News" >
	insert into news (title,content) values(#{title},#{content})
</insert>
<!-- 修改-->
<update id="update" parameterType="News" >
	update news set title=#{title},content=#{content} where id=#{id}
</update>
<!-- 删除 -->
<delete id="delete" parameterType="java.lang.Integer">
	delete from news where id=#{id}
</delete>
</mapper>
==========================================================================
测试类:

package com.etc.test;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.etc.dao.NewsDao;
import com.etc.entity.News;
import com.etc.utils.MyBatisSessionFactory;
public class TestNewsDao {	
	@Test
	public void testFindAll()
	{
		// 1 获取连接
		SqlSession session = MyBatisSessionFactory.getSession();	
		//2 执行查询
		List<News> list = session.getMapper(NewsDao.class).findAll();
		for(News n:list)
			System.out.println(n);
		//3 关闭
		MyBatisSessionFactory.closeSession();
	}
	//@Test
	public  void testFindById()
	{
		// 1 获取连接
		SqlSession session = MyBatisSessionFactory.getSession();	
		//2 执行查询
		News n = session.getMapper(NewsDao.class).findById(2);
		System.out.println(n);
		//3 关闭
		MyBatisSessionFactory.closeSession();
	}
	//@Test
	public void testadd()
	{
		// 1 获取连接
		SqlSession session = MyBatisSessionFactory.getSession();
		
		//2 执行添加
		News n = new News();
		n.setTitle("新的主题");
		n.setContent("新的内容");
		try {
			session.getMapper(NewsDao.class).add(n);
			session.commit();
			System.out.println("添加成功");
		} catch (Exception e) 
		{
			System.out.println("添加失败:");
			e.printStackTrace();
			session.rollback();
		}
		//3 关闭
		MyBatisSessionFactory.closeSession();
	}
	//@Test
	public void testupdate()
	{
		// 1 获取连接
		SqlSession session = MyBatisSessionFactory.getSession();
		
		//2 执行添加
		News n = new News();
		n.setId(4);
		n.setTitle("全新的主题");
		n.setContent("全新的内容");
		try {
			session.getMapper(NewsDao.class).update(n);
			session.commit();
			System.out.println("修改成功");
		} catch (Exception e) 
		{
			System.out.println("修改失败:");
			e.printStackTrace();
			session.rollback();
		}
		//3 关闭
		MyBatisSessionFactory.closeSession();

	}
	//@Test
	public void testdelete()
	{
		// 1 获取连接
		SqlSession session = MyBatisSessionFactory.getSession();	
		//2 执行添加
		try {
			session.getMapper(NewsDao.class).delete(4);
			session.commit();
			System.out.println("删除成功");
		} catch (Exception e) 
		{
			System.out.println("删除失败:");
			e.printStackTrace();
			session.rollback();
		}
		//3 关闭
		MyBatisSessionFactory.closeSession();
	}
}
=========================================================================

  

以上是关于mybatis---demo1--(单表增删改查)----bai的主要内容,如果未能解决你的问题,请参考以下文章

sqlalchemy 单表增删改查

Mybatis实现单表增删改查操作

django orm 单表增删改查

ORM的单表增删改查

Django项目7 单表增删改查

Django 第五篇ORM单表增删改查