mybatis环境搭建,对表进行增删改查(通过id,查找所有行(list返回),通过两个关键字进行查找)

搭建mybatis 开发环境

1.    引入jar包

Mybatis 3.2.2.jar    ojdbc5.jar    log4j-1.2.17.jar(打印日志,可以看到mybatis的具体实现)

2.    为mybatis 设置运行环境(通过配置文件)

mybatis-config.xml 

3.    Mybatis 的核心类

SqlSessionFactoryBuilder : 负责加载mybatis-config.xml

SQLSessionFactory  负责构建SQLSession


SqlSession:       “一次数据库会话”,包含了多次数据库访问操作,相当于jdbc里的connection

4 第一个mybatis程序

1、 新建表和实体类

2、 定义dao接口

3、 通过映射表和映射文件实现dao接口

       <?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTDMapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="first.MessageDao">

<!-- namespace="first.MessageDao"表示实现那个接口 -->

   <insert id="insertMessage" parameterType="first.Message">

      <!--id="insertMessage"实现那个方法   parameterType="first.Message" 所带的参数是那个类型的  -->

      <!-- 注意插入动作时,对象的主键必须得写,但是没有赋予,我们需要从数据库中得到关联的主键然后进行赋值 -->

      <!-- <selectKeyresultType="java.lang.Integer" keyProperty="对象的主键(id)属性名" order="BEFORE"></selectKey>

        查找主键     resultType 主键类型   order="BEFORE" 表示在插入数据之前进行查找

       -->

      insert intoMessage(id,command,description,content) values(#{id},#{command},#{description},#{content})

      <!-- SQL语句赋值采用#{属性名} -->

   </insert>

</mapper>

       4.将映射文件配置到mybatis-config.xml文件中(通知mybatis,有这个文件)

   <mappers>

      <mapper resource="first/MessageDaoImpl.xml"/>

      <!-- 通知mybatissrc进行写 -->

   </mappers>

4. 编写测试类

(1)    首先读取mybatis配置文件   

      Reader reader=null;

      try {

        reader = Resources.getResourceAsReader("mybatis-config.xml");

      } catch (IOException e) {

        // TODO Auto-generatedcatch block

        e.printStackTrace();

    }

(2)    然后使用读取到的配置文件构建会话工厂

              SqlSessionFactoryBuilder ssfb=new SqlSessionFactoryBuilder();

SqlSessionFactory sf =ssfb.build(reader);

 

(3)    开启一个会话

  SqlSession session = sf.openSession();

(4)    得到mybatis为我们创建的接口的实现类,这样我们就可以操作实现类完成目标

MessageDao dao = session.getMapper(MessageDao.class);

(5)    调用实现类的方法进行实现

最后事物提交事物关闭session.commit();

     

    session.close();

 

5

查询功能

<select id=”接口定义的方法名” paramaterType=”方法参数的类型” resuType=”方法返回值类型,要用全类名”>

</select>

 

注意:mybatis 会自动将结果集中的数据封装成指定返回值类型的对象。封装是,将结果的字段值设置到对象的相应属性里,要求结果字段名和对象的属性名保持一致

 

6、更新操作    --mapper文件写法

 

Dao中的接口是   public voidupdataMessage(Message m)

   <update id="updateMessage"         parameterType="first.Message">

      update message setcommand=#{command},description=#{description},content=#{content} where id=#{id}

</update>

 

注意:updateinsert ,delete操作完成后要进行提交 session.commit()然后在进行关闭操做session.close()

 

6、删除操作

Dao中的接口是   public voiddeleteMessage(int id)

 

7、询表中所有的元素

Dao中的接口是public List<Message> queryMessage();

 <!-- 查询所有返回List集合 id 为方法名, resultType="first.Message"集合中一个元素的全限定名-->

   <select id="queryMessage" resultType="first.Message">

      select * from message

   </select>

 

8、使用两个参数进行对数据的查找

<!-- 使用两个关键字进行数据的查找在声明接口时我们需要这样设置

      public MessagequeryMessageByCommend(@Param(value="command")Stringcommand,@Param(value="description")String description);

      使用@Param(value="command")进行对后面的形参进行定义,从而可以使得下面的select 语句

       command=#{command} anddescription=#{description}

       如果不是这样的话那么无法识别报错

    -->

  

  

   <select id="queryMessageByCommend" parameterType="java.lang.String" resultType="first.Message">

      select * from message where command=#{command} anddescription=#{description}

   </select>

9

}  如果在sql中包含> <,sql解析时,特殊符号会发生转义。

}  解决方案1:使用<![CDATA[….]]> 块

}  解决方案2 :使用转义字符 &gt; 代替>        &lt;  代替  <

 



上代码:


Message.java

package first;

import java.io.Serializable;

public class Message implements Serializable{
	private int id;
	private String command;
	private String description;
	private String content;
	public Message(int id, String command, String description, String content) {
		//super();
		this.id = id;
		this.command = command;
		this.description = description;
		this.content = content;
	}
	public Message() {
		//super();
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getCommand() {
		return command;
	}
	public void setCommand(String command) {
		this.command = command;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	
	
}

方法接口:MessageDao.java

package first;

import java.util.List;

import org.apache.ibatis.annotations.Param;

public interface MessageDao {
	public void insertMessage(Message m);
	
	public Message queryMessageById(int id);
	
	public void updateMessage(Message m);
	
	public void deleteMessage(int id);
	
	public List<Message> queryMessage();
	
	public Message queryMessageByCommend(@Param(value="command")String command,@Param(value="description")String description);
	
}
 

获取Session对象:MybatisUtil.java

package utils;

import java.io.IOException;
import java.io.Reader;

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 sf=null;
	
	static{
		//得到SQLSession 
		SqlSessionFactoryBuilder ssfb=new SqlSessionFactoryBuilder();
		
		Reader reader=null;
		try {
			reader = Resources.getResourceAsReader("mybatis-config.xml");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		sf =ssfb.build(reader);
	}
	
	public static SqlSession getSession()
	{
		SqlSession session=sf.openSession();
		return session;
	}
	
	
	public static void close(SqlSession session)
	{
		if(session!=null){
			session.close();
		}
	}
}




映射文件:MessageDaoImpl.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" >
<mapper namespace="first.MessageDao">
<!-- namespace="first.MessageDao" 表示实现那个接口 -->
	<insert id="insertMessage" parameterType="first.Message">
		<!--id="insertMessage" 实现那个方法    parameterType="first.Message" 所带的参数是那个类型的  -->
		<!-- 注意插入动作时,对象的主键必须得写,但是没有赋予,我们需要从数据库中得到关联的主键然后进行赋值 -->
		<!-- <selectKey resultType="java.lang.Integer" keyProperty="对象的主键(id)属性名" order="BEFORE"></selectKey>
			查找主键     resultType 主键类型    order="BEFORE" 表示在插入数据之前进行查找
		 -->
		insert into Message(id,command,description,content) values(#{id},#{command},#{description},#{content})
		<!-- SQL语句 赋值采用#{属性名} -->
	</insert>
	
	<select id="queryMessageById" parameterType="java.lang.Integer" resultType="first.Message">
		select id,command,description,content from message where id=#{id}
	</select>
	
	<update id="updateMessage" parameterType="first.Message">
		update message set command=#{command},description=#{description},content=#{content} where id=#{id}
	</update>
	
	<delete id="deleteMessage" parameterType="java.lang.Integer">
		delete from message where id = #{id}
	</delete>
	
	
	<!-- 查询所有 返回List集合 id 为方法名, resultType="first.Message"集合中一个元素的全限定名-->
	<select id="queryMessage" resultType="first.Message">
		<!--"<![CDATA[  sql  ]]>"  是为了防止sql语句中特殊字符转义 -->
		<![CDATA[
		select * from message
		]]>
	</select>
	
	<!-- 使用两个关键字进行数据的查找 在声明接口时我们需要这样设置
		public Message queryMessageByCommend(@Param(value="command")String command,@Param(value="description")String description);
	 	使用@Param(value="command")进行对后面的形参进行定义,从而可以使得下面的select 语句
	 	 command=#{command} and description=#{description}
	 	 如果不是这样的话那么无法识别报错
	 -->
	
	
	<select id="queryMessageByCommend" parameterType="java.lang.String" resultType="first.Message">
		select * from message where command=#{command} and description=#{description}
	</select>
	
</mapper>



最后mybatis配置文件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" >
<!-- mybatis 的所有配置都必须定义在configureation 标签里 -->
<configuration>
	<!-- 配置mybatis 运行环境。如果需要连接多个数据库,则需要多个environments -->
	<environments default="development">
		<!-- 配置一个mybatis的运行环境,id属性是这个环境的唯一标识 -->
		<environment id="development">
			<!-- 设置一个mybatis完成数据库操作是事物的提交策略,type属性值为JDBC表示用JDBC的方式进行提交 -->
			<transactionManager type="JDBC"></transactionManager>
			<!-- 配置数据库连接,type为“POOLED” 表示使用mybatis内置连接池-->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://127.0.0.1/myroot"/>
				<property name="username" value="root"/>
				<property name="password" value="123456"/>
			</dataSource>
		</environment>
	</environments>
	
	<mappers>
		<mapper resource="first/MessageDaoImpl.xml"/>
		<!-- 通知mybatis -->
	</mappers>
	
	
</configuration>


测试文件:TestMessageDao.java

package first;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import utils.MybatisUtil;


public class TextMessageDao {
	public static void main(String[] args) {	
		SqlSession session = MybatisUtil.getSession();		
		//得到到的实现类
		MessageDao dao = session.getMapper(MessageDao.class);
		
		/*
		 * 增加数据
		 */
		//调用insert 方法完成
//		Message message = new Message();
//		message.setCommand("asasas");
//		message.setContent("111111");
//		message.setDescription("111111111");
//		
//		dao.insertMessage(message);
//		
//		//提交
//		session.commit();
//		
//		session.close();
//		
		/*
		 * 通过ID查询数据
		 */
		
//		Message me=dao.queryMessageById(3);
//		System.out.println(me.getCommand());
//		System.out.println(me.getContent());
//		System.out.println(me.getDescription());
		
		/*
		 * 更新操作
		 */
		
//		Message me =new Message();
//		me.setId(6);
//		me.setCommand("zhang");
//		me.setDescription("张成功");
//		me.setContent("张彻底成功了");
//		
//		dao.updateMessage(me);
//		session.commit();
//		session.close();
		
		
		/*
		 * 删除操作
		 */
		
//		dao.deleteMessage(6);
//		
//		session.commit();
//		session.close();
		
		/**
		 * 
		 * list集合进行获取表中所有的数据
		 */
		
//		List<Message> messages = dao.queryMessage();
//		
//		for(Message message : messages){
//			System.out.println(message.getId());
//			System.out.println(message.getCommand());
//			System.out.println(message.getDescription());
//			System.out.println(message.getContent());
//		}
		
		Message message=dao.queryMessageByCommend("查看", "精彩内容");
		System.out.println(message.getId());
		System.out.println(message.getCommand());
		System.out.println(message.getDescription());
		System.out.println(message.getContent());
	}
}



 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值