对于mybatis应用的一些优化:
- 可以把数据库配置文件放在一个单独的文件中,在mybatis的配置文件中引入就可以了例如:
driver=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/jsky username=root password=123456
在配置文件中引入:
<!-- 引入配置文件 --> <properties resource="db.propertities"/>
- 为了不用每次都写全类名,可以在配置文件中为类创建别名:
<!-- 指定別名 --> <typeAliases > <!-- 指定單個類的別名 --> <!-- <typeAlias type="jsky.model.Student" alias="_Student"/> --> <!-- 指定某個包下所有類別名,默認直接類名 --> <package name="jsky.model"/> </typeAliases>
- 可以创建相关的工具类来帮助我们获取session
public class MyBatisUtils { private static SqlSessionFactory factory; static { try { InputStream is=Resources.getResourceAsStream("mybatis.xml"); factory=new SqlSessionFactoryBuilder().build(is); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 创建sqlsession * @return sqlsession */ public static SqlSession getSession() { return factory.openSession(); } /** * 关闭sqlsession * @param sqlSession sqlsession */ public static void closeSession(SqlSession sqlSession) { if(sqlSession!=null)sqlSession.close(); } }
- 在应用时,可以为类设计DAO接口,而映射文件对该接口的方法实现数据库的操作
StudentMapper.java
public interface StudentMapper { /** * 通過id獲取學生信息 * @param id * @return */ Student getById(Integer id); /** * 通過name獲取學生信息 * @param name * @return */ Student getByName(String name); /** * 獲取所有學生信息 * @return */ List<Student> getAll(); /** * insert a student message * @param student */ void insert(Student student); /** *delete a student * @param id */ void delete(Integer id); /** * update a student message * @param student */ void update(Student student); }
对应的配置文件:这里namespace填接口
<mapper namespace="jsky.dao.StudentMapper"> <select id="getById" parameterType="Integer" resultType="Student"> select * from student where id=#{id} </select> <select id="getByName" parameterType="String" resultType="Student"> select * from student where name=#{name} </select> <select id="getAll" resultType="Student"> select * from student </select> <insert id="insert" parameterType="Student" useGeneratedKeys="true" keyProperty="id" > insert into student(name,password,school) values(#{name},#{password},#{school}) </insert> <delete id="delete" parameterType="Integer"> delete student where id=#{id} </delete> <update id="update" parameterType="Student"> update student set name=#{name},password=#{password},school=#{school} where id=#{id} </update> </mapper>
mybatis会为这个接口自动提供实现。
- 最后测试:
@Test public void add() { SqlSession session=MyBatisUtils.getSession(); Student stu=new Student("張三", "121", "台灣小學"); StudentMapper mapper=session.getMapper(jsky.dao.StudentMapper.class); Student st=mapper.getById(1); System.out.println(st); mapper.insert(stu); session.commit(); MyBatisUtils.closeSession(session); }
对应的源码:
时间: 2024-11-04 17:32:06