1、mybatis的优点
mybatis:半自动化持久化框架
- sql(专注数据)和java编码(专注业务)分离
- 可使用简单的xml或者注解用于配置和原始映射
- 将接口和java中的pojo映射成数据库中的记录
- 可以理解为:业务代码+底层数据库的媒介
2、创建mybatis的步骤(一)---配置
- 创建数据库、建表
- 搭建开发环境
- 导入jar包
log4j-1.2.17.jar
mybatis-3.4.1.jar
mysql-connector-java-5.1.7-bin.jar
- 添加配置文件
mybatis-config.xml
- log4j.properties配置文件(建议加上)
# Global logging configuration log4j.rootLogger=DEBUG, stdout # 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
最终结构可参照下方图片:
3、创建mybatis的步骤(二)---代码
①创建pojo对象User
public class User { private int id; private String lastName; private int sex; }
②在src目录创建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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <!-- dataSource 数据源 POOLED 表示使用数据库连接池 --> <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> <!-- 引入sql语句对应的配置文件 --> <mappers> <mapper resource="com/atguigu/pojo/UserMapper.xml" /> (根据自己UserMapper.xml的位置更改路径,也可以写成通用的包名) </mappers> </configuration>
③创建UserMapper.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 属性一般情况下。 一种定义规则: ①使用对流的javaBean的全类名 ②使用Mapper接口的全类名 --> <mapper namespace="com.atguigu.pojo.User"> (此处写全类名) <!-- 此处写相应的SQL语句 增删改查 -->
</mapper>
④配置mybatis配置文件的提示:
Config 文件的 key: http://mybatis.org/dtd/mybatis-3-config.dtd
mapper文件的key: http://mybatis.org/dtd/mybatis-3-mapper.dtd
- 搜索xml --双击子文件 XML Catalog
- add--进行添加
- key--输入对应的Configuration和mapper的约束条件(dtd文件)
- URI---一定要选择URI
- File System 选择本地对应的文件添加
可以按照图中的结构进行建包,进行编码测试
⑤创建UserMapper接口
public interface UserMapper { /* * 1、根据编号查询用户信息 * 2、查询所有用户信息 * 3、添加用户信息 * 4、删除用户信息 * 5、更新用户信息 */ public User findUserById(int id); public List<User> allFindUser(); public int saveUser(User user); public int updateUser(User user); public int deleteUser(int id); }
⑥创建UserMapperTest类
import java.io.IOException; import java.sql.Connection; 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.Before; import org.junit.Test; import com.atguigu.mapper.UserMapper; import com.atguigu.pojo.User; (此处是通用代码) @SuppressWarnings("unused") public class UserMapperTest { private SqlSessionFactory factory; @Before public void before(){ try { factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")); } catch (IOException e) { e.printStackTrace(); } } @Test //根据id查找 public void testFindUserById() { /* * 1.factory创建session * 2.session通过代理模式 创建Mapper的实体类 * 3、mapper实体类执行方法 并获取返回值 * 4、输出内容 * 5、关流 */ SqlSession session = factory.openSession(); UserMapper userMapper = session.getMapper(UserMapper.class); User user = userMapper.findUserById(1); System.out.println(user); session.close(); } @Test //查找所有 public void testAllFindUser() { /* * 1.factory创建session * 2.session通过代理模式 创建Mapper的实体类 * 3、mapper实体类执行方法 并获取返回值 * 4、输出内容 * 5、关流 */ SqlSession session = factory.openSession(); UserMapper userMapper = session.getMapper(UserMapper.class); List<User> list = userMapper.allFindUser(); System.out.println(list); session.close(); } @Test //添加 public void testAddUser(){ SqlSession session = factory.openSession(); UserMapper userMapper = session.getMapper(UserMapper.class); int saveUser = userMapper.saveUser(new User(1,"冷清秋",1)); session.commit(); (需要进行提交,||不提交的结果:运行成功,但数据库无值) System.out.println(saveUser); session.close(); } @Test //修改 public void testUpdateUser(){ SqlSession session = factory.openSession(); UserMapper userMapper = session.getMapper(UserMapper.class); int updateUser = userMapper.updateUser(new User(1,"zhangsan",0)); session.commit(); System.out.println(updateUser); session.close(); } @Test //删除 public void deleteUser() { SqlSession session = factory.openSession(); UserMapper userMapper = session.getMapper(UserMapper.class); int deleteUser = userMapper.deleteUser(12); session.commit(); System.out.println(deleteUser); session.close(); } }
⑦对应的UserMapper.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.atguigu.mapper.UserMapper"> <!-- namespace:名称空间(自定义名字) id:唯一标识 resultType:返回值类型(写返回值类型的全类名) #{id}:从传递过来的参数中取出id值 --> <!-- public User findUserById(int id); --> <select id="findUserById" resultType="cn.aynu.pojo.User"> select* from user where id = #{id} </select> <!-- public List<User> allFindUser(); --> <select id="allFindUser" resultType="cn.aynu.pojo.User"> select id,name,sex from user </select> <insert id="saveUser" parameterType="cn.aynu.pojo.User"> insert into user(name,sex) values(#{name},#{sex}) </insert> <update id="updateUser"> update user set name = #{name},sex=#{sex} where id = #{id} </update> <delete id="deleteUser"> delete from user where id = #{id} </delete> </mapper>
敲小黑板:
1、当返回值是void的时候,resultType可以省略不写
2、当数据是基本数据类型的时候,resulttype可以省略不写
但是建议全部都加上,代码更规范,别人看之后通俗易懂,id和resultType一一对应
***不加resultType的错误***