mybatis小记

本文介绍了MyBatis的基本配置及使用方法,包括配置文件、数据库连接设置、实体类定义、Mapper接口与XML映射文件的编写,以及如何通过测试类进行简单操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


图1
这里是一个简单的mybatis的基本结构。刚接触,从杨哥给我的demo做个笔记吧。
首先是config,这是配置文件。
图2
其中jdbc.properties是一个键值的表,是记录jdbc信息。我用的是oracle数据库,自然也是oracle的jdbc。
图3
而这里的SqlMapConfig.xml,就是利用jdbc的配置文件了吧。下面是代码:
<?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>
		<!-- 导入jdbc.properties -->
		<properties resource="config/jdbc.properties" />
		<settings>
			<!-- mybaties二级缓存开启 -->
			<setting  name="cacheEnabled" value="true"/>
		</settings>
		
		<typeAliases>
			<!-- 这地方是定义数据类型所在的包。写的时候可以少些pojo -->
			<package name="pojo"/>
		</typeAliases>
		<!-- oracle数据库 -->
	  	 <environments default="development">
				<environment id="development"> 
					<transactionManager type="JDBC" />
					<dataSource type="POOLED">
						<property name="url" value="${url}"/>
						<property name="username" value="${username}"/>
						<property name="password" value="${password}"/>
						<property name="driver" value="${driver}"/>
					</dataSource>
				</environment>
		</environments>
	
	<mappers>

在util包里面的是一个封装类,将sessionfactory封装起来,getsession,使用方便。下面是代码:
<span style="font-size:12px;">package util;

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=null; 
	static {
		InputStream in=null;
		try{
			in = Resources.getResourceAsStream("config/SqlMapConfig.xml");
			factory = new SqlSessionFactoryBuilder().build(in);
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	public static SqlSession getSession(){
		return factory.openSession();
	}
	
	public static void closeSession(SqlSession session){
		if(session !=null) session.close();
	}

}
</span>

使用上面的util包里面封装的方法,可以省去很多步骤。下面是需要导入的一些jar包。
其中,junit是测试,mybatis是本次的重点,log4j是日志包。咳咳,据说是这样的。
这样一来,准备工作也就完成了。
下来就是根据数据库的表格,创建自定义的类型了。
用的user表,其中三个字段,username,password,id。
然后就是pojo包中的user类了:
<span style="font-size:12px;">package pojo;

import java.io.Serializable;
import java.util.List;

public class User implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private int id;
	private String userName;
	private String passWords;
	private List<Integer> ids;
	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassWords() {
		return passWords;
	}

	public void setPassWords(String passWords) {
		this.passWords = passWords;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public List<Integer> getIds() {
		return ids;
	}

	public void setIds(List<Integer> ids) {
		this.ids = ids;
	}

	@Override
	public String toString() {
		return "User [username=" + userName + ", password=" + passWords
				+ ", id=" + id + "]";
	}
}</span>

pojo,也类似于是bean的类已经建完了。
重点所在的mapper包下面东西了。


这里就是userMapper.java 的代码,这里是一个对于数据库操控方法的声明:

package mapper;

import java.util.List;

import pojo.User;

public interface UserMapper {
	/**
	 * 根据id查找
	 * @param id
	 * @return
	 */
	public User selectById(int id);
	

	/*public List<User> selectByNameWor(User user);*/
	public List<User> listByIds(User user);
	/**
	 * 删除
	 * @param id
	 * @return
	 */
	public boolean  deleteById(int id);
	/**
	 * 增加
	 * @param user
	 * @return
	 */
	public boolean  insertUser(User user);
	/**
	 * 修改
	 * @param id
	 * @return
	 */
	public boolean  updateById(User user);
	/**
	 * 查找所有
	 * @param name
	 * @return
	 */
	public List<User>  listByName(String name);
	/**
	 * 根据账户和密码查找
	 * @param id
	 * @return
	 */
	public User selectByNameWor(User user);
	
}
下面是userMapper.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="mapper.UserMapper">
	<cache/>
	 <select id="selectById" parameterType="int" resultType="User" useCache="false">  
        select username ,passwords,id from sysuser u  
             where u.id = #{id}  
     </select>  
    
     <delete id="deleteById" parameterType="int" >  
        delete from sysuser where id = #{id} 
     </delete> 
    
	<insert id="insertUser" parameterType="User">
	   	<selectKey keyProperty="id" order="BEFORE" resultType="int">
			select USER_SEQ.NEXTVAL from dual
    	 </selectKey>
		insert into sysuser (id,username,passwords) 
		values(#{id},#{userName},#{passWords})
	</insert>  
	
	<update id="updateById" parameterType="User">
		update sysuser set username=#{userName} ,passwords=#{passWords}
		 where id=#{id}
	</update> 
	
    <select id="listByName" parameterType="String"  resultType="User">  
        select username,passwords,id from sysuser u  
        where u.passwords like '%${value}%'
              
    </select> 
    
    <select id="listByIds" parameterType="User"  resultType="User">  
        select username,passwords,id from sysuser u  
        <where>
        <!-- (id=1 or id=2 or id=2) -->
       <!--  <if test="ids!=null">
        	<foreach  collection="ids" item="item_id" open="(" close=")" separator="or">
        	id=#{item_id}
        	</foreach>
        </if>  -->
        <!-- id in (2,4,5) -->
         <if test="ids!=null">
        	<foreach  collection="ids" item="item_id" open="id in (" close=")" separator=",">
        	#{item_id}
        	</foreach>
        </if> 
        </where>     
    </select> 
    
    
    <select id="selectByNameWor" parameterType="User" resultType="User">  
        select username ,passwords,id from sysuser u  
            <where>
              <if test="userName!=null and userName!=''">
              	and u.username=#{userName}
              </if>
              <if test="passWords!=null and passWords!=''">
              	and u.passwords=#{passWords}
              </if> 
            </where> 
     </select>  
    
    
    
  
    
    
</mapper>	

上面的xml和java类只是简单的几个方法。
有了这些之后,也就能够进行简单的测试了。
test测试包下面的test类的代码:

package Test;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

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 pojo.User;
import util.MybatisUtil;
import mapper.UserMapper;

public class Test {
	
	 public static void main(String[] args) {
		    SqlSession session = MybatisUtil.getSession();
			//创建usermapper对象,自动生成mapper代理对象
			UserMapper  userMapper=session.getMapper(UserMapper.class);
			User  user=userMapper.selectById(2);
			
			/*User userf=new User();
			userf.setPassWords("");
			userf.setUserName("李四");
			User  user=userMapper.selectByNameWor(userf);
			/*多个条件
			List<Integer> ids=new ArrayList<Integer>();
			ids.add(3);
			ids.add(4);
			ids.add(5);
			user.setIds(ids);
			List<User> ss=userMapper.listByIds(user);
			System.out.println(ss);*/
			
			List<User> ss = userMapper.listByName("7");
			session.close();
			System.out.println(ss);
	}
	
	
}

出现的结果是:
之所以出现这样的结果,直接能用sysout输出,是因为在user自定义的时候,有一个tostring的方法,可以变成这样的格式。

其中我也遇到了一个问题。
其中如果使用javaEE5.0的话就可以显示DEBUG的详细信息。
但是如果用的是Java EE 6,则不会显示DEBUG的详细信息,只会出现结果:
而不会出现DEBUG的详细信息。


内容概要:本文深入解析了扣子COZE AI编程及其详细应用代码案例,旨在帮助读者理解新一代低门槛智能体开发范式。文章从五个维度展开:关键概念、核心技巧、典型应用场景、详细代码案例分析以及未来发展趋势。首先介绍了扣子COZE的核心概念,如Bot、Workflow、Plugin、Memory和Knowledge。接着分享了意图识别、函数调用链、动态Prompt、渐进式发布及监控可观测等核心技巧。然后列举了企业内部智能客服、电商导购助手、教育领域AI助教和金融行业合规质检等应用场景。最后,通过构建“会议纪要智能助手”的详细代码案例,展示了从需求描述、技术方案、Workflow节点拆解到调试与上线的全过程,并展望了多智能体协作、本地私有部署、Agent2Agent协议、边缘计算插件和实时RAG等未来发展方向。; 适合人群:对AI编程感兴趣的开发者,尤其是希望快速落地AI产品的技术人员。; 使用场景及目标:①学习如何使用扣子COZE构建生产级智能体;②掌握智能体实例、自动化流程、扩展能力和知识库的使用方法;③通过实际案例理解如何实现会议纪要智能助手的功能,包括触发器设置、下载节点、LLM节点Prompt设计、Code节点处理和邮件节点配置。; 阅读建议:本文不仅提供了理论知识,还包含了详细的代码案例,建议读者结合实际业务需求进行实践,逐步掌握扣子COZE的各项功能,并关注其未来的发展趋势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值