AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
~~~ <!-- sql demo--> CREATE TABLE `employee` ( `id` varchar(50) NOT NULL default '', `name` varchar(50) default NULL, `gender` char(1) default NULL, `address` varchar(100) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `employee` VALUES ('1', '张全蛋', '1', '暴走大事件'); INSERT INTO `employee` VALUES ('2', '王尼玛', '1', '暴走大事件'); INSERT INTO `employee` VALUES ('3', '李小华', '0', '富士康'); INSERT INTO `employee` VALUES ('4', '赵铁柱', '1', '富士康'); INSERT INTO `employee` VALUES ('5', '风清扬', '1', '华山'); INSERT INTO `employee` VALUES ('6', '周杰伦', '1', '台北'); INSERT INTO `employee` VALUES ('7', '卡死了', '1', '我说的'); ~~~ > 使用步骤: > 1) 导入jar包 ![](https://box.kancloud.cn/c734069ed8737886098fe54907151c86_280x86.png) > 2)添加mybatis全局配置文件,log4j日志文件,数据源信息文件 ##### 1.新建一个文件夹(命名为resource或者config),将此文件夹放在类路径下(怎么放?见下面步骤) ![](https://box.kancloud.cn/b7eabd76146f30e0532b6365475326d1_450x573.png) ![](https://box.kancloud.cn/f6cbe12a311b4aeff5c5cbe3192d9243_747x562.png) //全局配置文件 ~~~ <?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> <!-- 导入配置文件。可以在当前页面 ${键} 来或者 键所对应的valueu值 key=value --> <properties resource="dbconfig.properties"/> <!-- 声明别名 --> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}" /> <property name="username" value="${user}"/> <property name="password" value="${psw}"/> </dataSource> </environment> </environments> <!-- 对应的实体类的配置文件 --> <mappers> <mapper resource="cn/li/pojo/EmployeeMapper.xml"/> <mapper class="cn.li.dao.EmpDao"/> </mappers> </configuration> ~~~ //log4j日志文件 ~~~ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"> <param name="Encoding" value="GBK" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" /> </layout> </appender> <logger name="java.sql"> <level value="debug" /> </logger> <logger name="org.apache.ibatis"> <level value="info" /> </logger> <root> <level value="debug" /> <appender-ref ref="STDOUT" /> </root> </log4j:configuration> ~~~ //数据源信息文件 ~~~ driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis1?characterEncoding=utf-8 user=root psw=root ~~~ > 3)创建实例类(POJO,domain,javaBean,entity),实体类的映射文件(sql映射文件) ~~~ public class Employee { private int id ; private String name; private char gender; private String address; //setter、getter方法 toString方法 } ~~~ ~~~ //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"> <!-- 每一个实体类 都对应着Mybatis的一个命名空间 。 namespace属性值 相当于id,如果存在多个 不允许重复 --> <!-- 命名空间,一般情况下,在当前空间中声明的是,实体类对应的别名 --> <mapper namespace="cn.li.dao.EmployeeDao"> <select id="selOne" resultType="cn.li.pojo.Employee"> select * from employee where id=#{id} </select> <!-- 新增 删除 修改的时候parameterType="cn.li.pojo.Employee --> <!-- 新增员工 使用主键自增 自增必须有这两个属性useGeneratedKeys="true" keyProperty="id" --> <insert id="insertEmp" useGeneratedKeys="true" keyProperty="id"> insert into employee(name,gender,address) values(#{name},#{gender},#{address}) </insert> <!-- 删除员工 --> <delete id="deleteEmp"> delete from employee where id=#{id} </delete> <!-- 更新员工 --> <delete id="updateEmp"> update employee set name=#{name},gender=#{gender} where id=#{id} </delete> <!-- 通过名字和性别查询员工信息 --> <select id="selEmpByNameAndGender" resultType="cn.li.pojo.Employee"> select * from employee where name=#{name} and gender=#{gender}; </select> <!-- 通过名字和性别查询员工信息 入参是map集合 --> <select id="selEmpByMap" resultType="cn.li.pojo.Employee"> select * from employee where name=#{aa} and gender=#{bb}; </select> <!-- 查询所有员工 --> <select id="selAllEmp" resultType="cn.li.pojo.Employee"> select * from employee </select> <!-- 动态sql 之if --> <select id="selDS1" resultType="cn.li.pojo.Employee"> select * from employee where 1=1 <if test="name!=null"> and name like '%${name}%' </if> </select> <!-- 动态sql 之choose when otherwise 注意 choose只选择一次。如果所有when都不满足的时候,otherwise中的内容才会被拼接 --> <select id="selDS2" resultType="cn.li.pojo.Employee"> select * from employee where 1=1 <choose> <when test="name!=null"> and name like '%${name}%' </when> <when test="address!=null"> and address='${address}' </when> <otherwise> order by name </otherwise> </choose> </select> <!-- 动态sql 之where<> --> <select id="selDS3" resultType="cn.li.pojo.Employee"> select * from employee <where> <choose> <when test="name!=null"> name like '%${name}%' </when> <when test="address!=null"> address='${address}' </when> <otherwise> order by name </otherwise> </choose> </where> </select> <!-- 动态sql 之where<> and if --> <select id="selDS4" resultType="cn.li.pojo.Employee"> select * from employee <where> <if test="name!=null"> name like '%${name}%' </if> <if test="address!=null"> and address='${address}' </if> </where> </select> <!-- 动态sql 之trim and if --> <select id="selDS5" resultType="cn.li.pojo.Employee"> select * from employee <trim prefix="WHERE" prefixOverrides="and /or "> <if test="name!=null"> name like '%${name}%' </if> <if test="address!=null"> and address=#{address} </if> </trim> </select> <!-- 动态sql 之set --> <update id="selDS6"> update employee <set> <if test="name!=null"> name=#{name}, </if> <if test="address!=null"> address=#{address} </if> </set> where id=#{id} </update> <!-- 动态sql 之set --> <update id="selDS7"> update employee <trim prefix="SET" suffixOverrides=","> <if test="name!=null"> name=#{name}, </if> <if test="address!=null"> address=#{address} </if> </trim> where id=#{id} </update> <!-- foreach批量删除 --> <delete id="deleteBatch"> delete from employee where id in <!-- collection list 数组:array --> <foreach collection="list" open="(" separator="," close=")" item="ids"> #{ids} </foreach> </delete> </mapper> ~~~ > 4)将映射文件注册到mybatis全局配置文件中 ![](https://box.kancloud.cn/436ce0268bc0b57c7e9e44b56b59a797_689x127.png) > 5)编写SQL,根据全局配置文件拿到SqlSessionFactory,通过SqlSessionFactory拿到SqlSession对象,调用封装好的方法进行CRUD,关闭会话。 ~~~ try { // 根据全局配置文件。利用SqlSessionFactoryBuilder创建数据库会话工厂对象。 Reader reader = Resources.getResourceAsReader("resource.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); // 通过会话工厂获取SqlSession对象,一个SqlSession对象代表和数据库的一次会话 SqlSession session = sqlSessionFactory.openSession(); // 推荐使用namespace+id,防止多个配置文件中的id重复。 Employee emp = session.selectOne("hello.selOne", "1"); System.out.println(emp); // 每次使用完需要关闭sqlsession对象。(必须) session.close(); // 注意:SqlSession不是线程安全的,因此不能被共享。 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } /** * 新增员工操作 */ @Test public void test4(){ SqlSession sqlSession=getSqlSession(); EmployeeDao employeeDao=sqlSession.getMapper(EmployeeDao.class); Employee emp=new Employee("张三",'1',"常山"); int total=employeeDao.insertEmp(emp); sqlSession.commit();//已经默认开启了事务,需要手动的提交 System.out.println(total); sqlSession.close(); } ~~~