MyBatis 入门Demo
新建数据库my_db,新建表student_tb
id为主键,不自动递增
下载mybatis
解压。
新建java项目,什么都不用勾选(如果要在idea中操作数据库,可勾选sql support)。
勾选后,idea右侧会有一个database的工具,可在idea中直接操作数据库。
导入mybatis所有的jar包、数据库驱动
mybatis.jar是必需的。
lib是mybatis依赖的第三方jar包,根据需要选择,嫌麻烦或者小白,可全部导入lib中的jar。
pdf是mybatis的文档。
设置mybatis的日志
在src下新建文件 log4j.properties ,内容如下:
# global logging configuration log4j.rootlogger=error, stdout,a # mybatis logging configuration... log4j.logger.org.mybatis.example.blogmapper=trace # console output... log4j.appender.stdout=org.apache.log4j.consoleappender log4j.appender.stdout.layout=org.apache.log4j.patternlayout log4j.appender.stdout.layout.conversionpattern=%5p [%t] - %m%n # file output... log4j.appender.a = org.apache.log4j.dailyrollingfileappender log4j.appender.a.file = d:/log.txt log4j.appender.a.append = true log4j.appender.a.threshold = error log4j.appender.a.layout = org.apache.log4j.patternlayout log4j.appender.a.layout.conversionpattern = %-d{yyyy-mm-dd hh:mm:ss} [ %t:%r ] - [ %p ] %m%n log4j.appender.a.encoding=utf-8
可到 mybatis.pdf 8.1.1.2小节复制来修改。
src下新建包com.chy.pojo,包下新建pojo类student:
package com.chy.pojo; public class student { private int id; private string name; private int age; private int score; 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; } public int getscore() { return score; } public void setscore(int score) { this.score = score; } @override public string tostring() { return "student{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + ", score=" + score + '}'; } }
src下新建包com.chy.mapper,mapper下创建实体-数据表的映射文件 studentmapper.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="com.chy.mapper.studentmapper"> <insert id="insertstudent" parametertype="student"> insert into student_tb(id,name,age,score)values (#{id},#{name},#{age},#{score}) </insert> <select id="querybyid" parametertype="int" resulttype="student"> select * from student_tb where id=#{id} </select> <update id="updatestudent" parametertype="student"> update student_tb set name=#{name},age=#{age},score=#{score} where id=#{id} </update> <delete id="deletestudent" parametertype="int"> delete from student_tb where id=#{id} </delete> </mapper>
可以到mybatis.pdf 2.1.5小节复制来修改。
我们把映射文件都放在mapper包下,常以 实体类名+mapper 命名。
<mapper>的namespace常设置为此映射文件的路径。
通过id调用相应的sql语句,parametertype指定参数类型,resulttype指定要把结果集记录映射到哪种数据类型(只有<select>有这个属性)。
#{}相当于sql语句中的占位符?,{}中写对应实体类的成员变量,会自动把参数转换为指定的成员变量。
src下新建数据库配置文件mysql.properties:
driver=com.mysql.cj.jdbc.driver url=jdbc:mysql://localhost:3306/my_db?servertimezone=gmt username=chy password=abcd
对应信息要换为自己的。
最好在文件名中注明是哪种数据库,如果公司要换数据库,比如从mysql换为oracle,好区分这个是哪个数据库的配置。
src下新建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"> <configuration> <!--指定数据库配置文件的位置--> <properties resource="mysql.properties"></properties> <!--指定日志实现使用的是log4j--> <settings> <setting name="logimpl" value="log4j"/> </settings> <!--指定实体类--> <typealiases> <typealias type="com.chy.pojo.student" alias="student"/> </typealiases> <!--指定数据库配置文件中的变量名--> <environments default="development"> <environment id="development"> <transactionmanager type="jdbc"></transactionmanager> <datasource type="pooled"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </datasource> </environment> </environments> <!--指定映射文件的位置--> <mappers> <mapper resource="com/chy/mapper/studentmapper.xml"/> </mappers> <!-- continue going here --> </configuration>
可到mybatis.pdf 2.1.2小节复制来改。
<configuration>的子元素是有一定顺序的,顺序不对会报红。
src下新建包com.chy.test,包下新建测试类test:
package com.chy.test; import com.chy.pojo.student; 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 java.io.ioexception; import java.io.reader; public class test { public static void main(string[] args) throws ioexception { //加载mybatis的全局配置文件 string resources="mybatis-config.xml"; reader reader = resources.getresourceasreader(resources); //根据配置文件构建sqlsessionfactory sqlsessionfactory sqlsessionfactory = new sqlsessionfactorybuilder().build(reader); //通过sqlsessionfactory创建sqlsession sqlsession sqlsession=sqlsessionfactory.opensession(); //增 student student = new student(); student.setid(1); student.setname("chy"); //第一个参数对应映射文件中的id,通过id调用相应的sql语句,第二个参数是传给sql语句的 sqlsession.insert("insertstudent", student); //修改数据库(增、删、改)后,需要commit()提交给数据库,才会同步本次会话做的修改。只有查询的,可以不commit()。 sqlsession.commit(); //关闭会话 sqlsession.close(); } }
//改 student student = new student(); student.setid(1); student.setname("chenghongyong"); sqlsession.update("updatestudent", student);
//查 student student=sqlsession.selectone("querybyid", 1); system.out.println(student);
如果本次session期间,只有查询,可以不用commit()。
//删 sqlsession.delete("deletestudent", 1);
说明
(1)版本声明部分,最好不要复制其他人的,如果你和ta用的mybatis库版本不同,会出错。最好到mybatis.pdf中去复制。
<!doctype mapper public "-//mybatis.org//dtd mapper 3.0//en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
(2)配置文件的文件名问题
log4j.properties这个文件名是约定的,不能自己取。
映射文件、数据库配置文件需要在mybatis全局配置文件中指定,它们的文件名可以自己取。
mybatis全局配置文件要在程序中指定,文件名可以自己取。
(3)配置文件的位置问题
配置文件必须放在资源根目录下。常见的做法有2种:
- 在项目的根目录下新建文件夹resource,右键标识为资源根目录
注意是resource root,不是source root。
在里面放配置文件:
- 也可以像demo中一样放置在src下,因为src就是默认的资源根目录。
mapper中的映射文件放哪儿都行,只要路径配置对得上就ok。
log4j.properties必须直接放在资源根目录下(不能放在子文件夹里)。
上一篇: Python-数据类型
下一篇: 代码块(初始化块)