mybatis入门

来源:互联网 发布:中国云计算用户大会 编辑:程序博客网 时间:2024/06/03 19:07

开发任务为:

1.根据id查询用户信息

2.根据用户名模糊查信息

3.添加用户

4.添加用户时,.将插入数据的主键返回到stu对象中(两种方式:1.SELECT LAST_INSERT_ID()  2.SELECT UUID())

6.删除用户

7.更新用户


搭建mybatis环境:

新建一个web工程,加入jar文件(mybatis-3.2.7.jar是mybatis核心jar)

下载jar地址 https://github.com/mybatis/mybatis-3/releases

创建SqlMapConfig.xml文件(mybatis.xml文件)配置mybatis数据源,加载mapper配置文件

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration SYSTEM "http://mybatis.org/dtd/mybatis-3-config.dtd" ><configuration><!--数据源--><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><!-- 加载mapper配置文件 --><mappers><mapper resource="sqlmap/stu.xml"/></mappers></configuration>

配置日志文件log4j.properties

# Global logging configuration#在开发环境下日志级别设置为DEBUG,生产环境下设置为stdout、infolog4j.rootLogger=DEBUG, stdout# Console output...log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

工程结构为



创建entity

package pojo;public class Stu {private long id;private String name;public long getId() {return id;}public void setId(long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Stu [id=" + id + ", name=" + name + "]";}}


创建mapper映射文件

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper SYSTEM "http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><mapper namespace="test"><!--将sql语句封装到mappedStatement对象中parameterType指的是输入的参数类型resultMap指的是sql输出的结果的类型(java对象)#{id} #{}指的是占位符号,id表示输入参数类型  -->  <select id="findStuById" parameterType="int" resultType="pojo.Stu">  <!-- select * from stu where id=#{id} -->  select * from stu where id=#{value}  </select>  <!-- 根据用户名模糊查信息   ${}表示拼接符号,会引起sql注入  -->  <select id="findStuByName" parameterType="java.lang.String" resultType="pojo.Stu">  select * from stu where name like '%${value}%'  </select>    <!-- 添加用户 -->  <insert id="insertStu" parameterType="pojo.Stu">  <!--  将插入数据的主键返回到stu对象中  SELECT LAST_INSERT_ID():得到insert进去的主键值,适用于自增的主键  keyProperty:将查询到的主键值设置到parameterType指定的对象的哪个属性  order:SELECT LAST_INSERT_ID() 相对于insert的执行顺序  resultType:指定SELECT LAST_INSERT_ID()的结果类型    -->  <selectKey order="AFTER" resultType="java.lang.Integer" keyProperty="id">  SELECT LAST_INSERT_ID()  </selectKey>  <!--  mysql的uuid生成主键  执行过程:  通过uuid得到主键,将主键设置到stu对象中id属性里  其次insert执行时,从stu对象中取出id属性        通过oracle的序列生成主键:    SELECT 序列名.nextval()    -->   <!--  <selectKey order="BEFORE" resultType="java.lang.Integer" keyProperty="id">  SELECT UUID()  </selectKey> -->  insert into  stu(id,name)  VALUES (#{id},#{name});  </insert>    <!--删除用户  -->  <delete id="deleteStu" parameterType="java.lang.Integer">     delete from stu where id=#{id}  </delete>    <!-- 更新用户  #{id}:从输入的stu对象中获取id属性值   -->  <update id="updatestu" parameterType="pojo.Stu">  update stu set id=#{id},name=#{name} where id=#{id}  </update></mapper>


创建测试类

package tests;import java.io.IOException;import java.io.InputStream;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 org.junit.Test;import pojo.Stu;public class Mybatis {//根据id查询用户信息,返回一条结果@Testpublic void findStuByIdTest() throws IOException{//1.创建会话工厂String resource= "SqlMapConfig.xml";//得到文件流InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//2.通过工厂得到sqlsessionSqlSession session = sessionFactory.openSession();//3.通过sqlSession操作数据库//  第一个参数:statement,mapper文件中的namespace.id//  第二个resultType是输出结果的类型Stu stu = session.selectOne("test.findStuById", 1);System.out.println(stu.getName());//4.释放资源session.close();}@Testpublic void findStuByNameTest() throws IOException{String resource = "SqlMapConfig.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession  session = sqlSessionFactory.openSession();//"%小%"//"小"   select * from stu where name like '%小%'//List<Stu> list =session.selectList("test.findStuByName", "小");System.out.println(list);session.close();}@Testpublic void insertStuTest() throws IOException{String resource = "SqlMapConfig.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession  session = sqlSessionFactory.openSession();Stu stu = new Stu();stu.setName("小号");session.insert("test.insertStu", stu);System.out.println(stu);//获取用户的主键System.out.println(stu.getId());//提交事务session.commit();session.close();}@Testpublic void deleteStuTest() throws IOException{String resource = "SqlMapConfig.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession  session = sqlSessionFactory.openSession();session.delete("test.deleteStu", 8);//提交事务session.commit();session.close();}@Testpublic void updatestuTest() throws IOException{String resource = "SqlMapConfig.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession  session = sqlSessionFactory.openSession();Stu stu = new Stu();stu.setId(7);stu.setName("小美");session.update("test.updatestu", stu);System.out.println(stu);//获取用户的主键System.out.println(stu.getId());//提交事务session.commit();session.close();}}

sqlsession对象的方法:
查询返回一条数据时用selectOne
查询返回多条数据时用selectList
添加数据时用insert
删除数据时用delete
更新数据时用update
注意:
增删改需要事务
sqlsession开启记得关闭


#{}与${}区别

#{}是占位符

${}是拼接符,会有sql注入问题,不安全,order by时使用


原创粉丝点击