1.CURD操作
第一步:创建maven工程并导入坐标
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.itheima</groupId> <artifactId>day02_eesy_01mybatisCURD</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> </dependencies> </project>
第二步:创建实体类和dao的接口
package com.itheima.domain; import java.io.Serializable; import java.util.Date; public class User implements Serializable { private Integer id; private String username; private Date birthday; private String sex; private String address; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", birthday=" + birthday + ", sex='" + sex + '\'' + ", address='" + address + '\'' + '}'; } }
package com.itheima.dao; import com.itheima.domain.User; import java.util.List; public interface IUserDao { List<User> findAll(); void saveUser(User user); void updateUser(User user); void deleteUser(Integer userId); }
第三步:创建Mybatis的主配置文件
<?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"> <!-- mybatis的主配置文件 --> <configuration> <!-- 配置环境 --> <environments default="mysql"> <!-- 配置mysql环境 --> <environment id="mysql"> <!-- 事物类型 --> <transactionManager type="JDBC"></transactionManager> <!-- 配置数据源(连接池) --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis" /> <property name="username" value="root" /> <property name="password" value="123456" /> </dataSource> </environment> </environments> <!-- 指定映射配置文件的位置,映射配置文件指的是dao独立的配置文件--> <mappers> <mapper resource="com/itheima/dao/IUserDao.xml"/> </mappers> </configuration>
第四步:创建映射配置文件
<?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.itheima.dao.IUserDao"> <!-- 配置查询所有 --> <select id="findAll" resultType="com.itheima.domain.User"> select * from user; </select> <insert id="saveUser" parameterType="com.itheima.domain.User"> insert into user(username,address,sex,birthday) values(#{username},#{address},#{sex},#{birthday}); </insert> <update id="updateUser" parameterType="com.itheima.domain.User"> update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id}; </update> <delete id="deleteUser" parameterType="Integer"> delete from user where id=#{uid}; </delete> </mapper>
第五歩:测试程序
package com.itheima.test; import com.itheima.dao.IUserDao; import com.itheima.domain.User; 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.After; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.Date; import java.util.List; public class MybatisTest { private InputStream in; private SqlSession sqlSession; private IUserDao userDao; @Before public void init() throws IOException { // 1.读取文件 in = Resources.getResourceAsStream("SqlMapConfig.xml"); // 2.创建SqlSessionFactory工厂 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); // 3.使用工厂生产SQLSession对象 sqlSession = factory.openSession(); // 4.使用SQLSession创建Dao接口的代理对象 userDao = sqlSession.getMapper(IUserDao.class); } @After public void destroy() throws IOException { // 提交事务 sqlSession.commit(); // 关闭资源 sqlSession.close(); in.close(); } /** * 查询所有用户 */ @Test public void findAll() throws IOException { List<User> users = userDao.findAll(); for (User user : users) { System.out.println(user); } } /** * 保存(插入)用户 */ @Test public void testSave() { User user = new User(); user.setUsername("mybatis saveuser"); user.setAddress("beijing"); user.setSex("男"); user.setBirthday(new Date()); userDao.saveUser(user); } /** * 更新用户信息 */ @Test public void testUpdate(){ User user = new User(); user.setId(50); user.setUsername("mybatis updateUser"); user.setAddress("beijing"); user.setSex("女"); user.setBirthday(new Date()); userDao.updateUser(user); } /** * 删除方法 */ @Test public void testDelete(){ userDao.deleteUser(48); } }
2.OGNL表达式
Object Graphic Navigation Language
对象 图 导航 语言
它是通过对象的取值方法来获取数据。在写法上把get给省略了。
比如:我们获取用户的名称
类中的写法:user.getUsername();
OGNL表达式写法:user.username
mybatis中为什么能直接写username,而不用user.呢:
因为在parameterType中已经提供了属性所属的类,所以此时不需要写对象名