Java——mybatis(使用mybatis对mysql数据库进行增删改查的操作)
第一步:这里现需要创建配置文件,创建文件名称为log4j.properties(也可以自取),在所创建的log4j.properties中进行配置,配置如下:
log4j.rootLogger=DEBUG, Console #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n log4j.logger.java.sql.ResultSet=INFO log4j.logger.org.apache=INFO log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG
第二步:创建主配置文件,名为“SqlMapConfig.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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <!--数据库连接池 --> <dataSource type="POOLED"> <!--解析:这里是添加驱动,还需要注意:这里我的mysql版本是8点多版本,所以在添加驱动时,还需要添加cj。 如果版本不是那么高的话,驱动就这样的写(com.mysql.cj.jdbc.Driver),反正根据自己的来 --> <property name="driver" value="com.mysql.cj.jdbc.Driver" /> <!--这里属于所访问的地址,还是需要注意一下:下面是由于我的mysql是8点多的版本,需要添加“?serverTimezone=UTC”这个, 因为这个是解决时区的问题,出现时区的问题,就加上,如果没有,就不加 。介绍:day是我的数据库,还是根据自己的来 --> <property name="url" value="jdbc:mysql://localhost:3306/day?serverTimezone=UTC" /> <!--用户 --> <property name="username" value="root" /> <!--这是mysql的密码,反正还是根据自己的mysql的密码 --> <property name="password" value="123456" /> </dataSource> </environment> </environments> <mappers> <!--这里是主配置文件(SqlMapConfig.xml)调用映射文件(user.xml),配置如下 --> <mapper resource="user.xml" /> </mappers> </configuration>
第三步:创建一个类,定义一些属性,就是为了更好的理解。这里类名所取名为“text1”。
package com.mybatis.app; public class text1 { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "text1 [id=" + id + ", name=" + name + ", age=" + age + "]"; } public text1(String name,int age) { this.name=name; this.age=age; } public text1() {} }
第四步:mybatis需要有映射文件,所以这步就是配置映射文件,我取名为“user.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"> <!--作用: namespace:命令空间,用于隔离sql语句 --> <mapper namespace="test"> <!-- 作用: id是来用取别名 parameterType定义输入到sql中的映射类型 resultType定义结果映射类型 --> <!--查询 --> <!--这是通过id来查询 ,所以类型用整形 --> <select id="User" parameterType="int" resultType="com.mybatis.app.text1"> select * from student where id=#{id}<!--#{id}是属于占位符 --> </select> <!--通过名称来查 ,所以类型就用字符串 --> <select id="Username" parameterType="String" resultType="com.mybatis.app.text1"> select * from student where name like "%${name}%" </select> <!--添加 --> <insert id="addUser" parameterType="com.mybatis.app.text1"> insert into student(name,age) value(#{name},#{age}) </insert> <!-- 删除 --> <delete id="deleteUser" parameterType="int"> delete from student where id=#{id} </delete> <!--修改 --> <!-- 想要进行修改,就需要查询,所以先查询,再修改 --> <select id="selectUser" parameterType="String" resultType="com.mybatis.app.text1"> select * from student where name=#{name} </select> <update id="updateUser" parameterType="com.mybatis.app.text1"> update student set name=#{name} where id=#{id} </update> </mapper>
第五步:创建测试类,代码如下:
package com.mybatis.app; import java.io.InputStream; import java.util.Iterator; 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; public class text { //任务:通过员工的ID来查找 public static void main(String [] args) throws Exception {//mybatis配置文件 String sql="SqlMapConfig.xml";//这里的SqlMapConfig.xml是我的主配置 //得到配置文件流 InputStream inputStream = Resources.getResourceAsStream(sql); //创建会话工厂 SqlSessionFactory sqlseesion=new SqlSessionFactoryBuilder().build(inputStream); SqlSession session =sqlseesion.openSession(); //第一部分:查询 //通过ID来查询 text1 text =session.selectOne("test.User",2);//这里‘2’是查询id为2,并返回所有信息,selectOne方法只能查询一条数据 System.out.println(text); //通过用户名来查询 List<Object> text1= session.selectList("test.Username","李四");//selectList方法是用于集合,只要参数在集合中,则返回参数的信息。如果没有在集合中,则返回空集合 System.out.println(text1); //第二步分:添加 text1 addname=new text1("王小山",25); int n= session.insert("test.addUser", addname); //提交事务 //注:添加以后需要提交,不然在mysql中看不到所添加的数据 session.commit(); if(n>0) { System.out.println("添加成功!"); }else { System.out.println("添加失败!"); } //第三部分:删除 session.delete("test.deleteUser", 8);//这里是通过id来进行删除的 //提交事务 session.commit(); //关闭,释放资源 session.close(); //第四部分:修改 //这是查询包含姓名为‘王’的信息,这里可以改写任意的条件 List<text1> list=session.selectList("test.selectUser", "王"); //isEmpty()方法是判断集合是否为空 if(!list.isEmpty()) { //使用迭代器,也可以理解是获取集合中的所有元素 Iterator<text1> ite=list.iterator(); while (ite.hasNext()) { //next()方法可以理解为是获取到第一行记录 text1 te=ite.next(); te.setName("旺旺1");//这里是进行所要改写的内容 session.update("test.updateUser", te); //提交事务 session.commit(); } } //关闭,释放资源 session.close(); } }
最终效果如下(注:这里只是一部分的效果(只有查询和添加),删除和修改在数据库中可以看见):
注:想要完成以上的效果,所要用的包,如下: